通常,变量声明中的=
被编译器视为移动构造。例如:
vector<int> foo = vector<int>(13, 0);
将调用vector<int>::vector<int>(vector<int>&&)
构造函数。
这如何与make_pair
一起使用?如果我这样做,我是在构建一个临时的并移动它:
pair<int, int> foo = make_pair(13, 0);
显然,后果变得更加重要,因为pair
中的类型比int
更重,但问题仍然存在。这是临时建造的吗?如果make_pair
迫使临时,我认为我可以打电话:
pair<int, int> foo = pair(13, 0);
无论哪种方式,什么时候可以隐式转换类型,但不相同?例如:
pair<string, int> foo = make_pair<"Hello World!", 13>;
或者:
pair<string, int> foo = pair("Hello World!", 13);
在这种情况下是否创建了临时pair<const char*, int>
?
答案 0 :(得分:0)
std::make_pair
返回 pair 对象的右值,然后赋值运算符 =
将右值移动到左值,因为 std::pair 已经定义了 copy/move assignment operator。
“对类对象的赋值由复制/移动赋值运算符定义。”
参考:Cpp11 Standard 5.17 赋值和复合赋值运算符。