对于 C++98
template <class T1, class T2>
pair<T1,T2> make_pair (T1 x, T2 y);
对于 C++11
template <class T1, class T2>
pair<V1,V2> make_pair (T1&& x, T2&& y); // see below for definition of V1 and V2
如果 T1 和/或 T2 是右值引用,则对象将被移动并 x
和/或 y 处于未定义但有效的状态。
// make_pair example
#include <utility> // std::pair
#include <iostream> // std::cout
#include <functional>
#include <unordered_set>
using namespace std;
int main () {
int i = 2;
int j = 3;
pair<int, int> p0 = make_pair<int, int>(2, 3); // fine
pair<int, int> p1 = make_pair<int, int>(move(i), move(j)); // fine
pair<int, int> p2 = make_pair<int, int>(i+0, j+0); // fine
pair<int, int> p3 = pair<int, int>(i, j); // fine
const int i2 = 2;
const int j2 = 3;
// error: no matching function for call to ‘make_pair(const int&, const int&)’
pair<int, int> p4 = make_pair<int, int>(i2, j2); // wrong
// error: no matching function for call to ‘make_pair(int&, int&)’
pair<int, int> p5 = make_pair<int, int>(i, j); // wrong
return 0;
}
Question> 我发现创建一个不方便pair
与非右值引用变量make_pair
。
正如您在上面的代码中看到的,以下行无法编译。
// error: no matching function for call to ‘make_pair(int&, int&)’
pair<int, int> p4 = make_pair<int, int>(i, j); // wrong
在实际应用中,如何利用make_pair
使用非右值引用变量?
谢谢