是= make_pair调用复制构造函数?

时间:2015-11-30 12:45:10

标签: c++ copy-constructor assignment-operator temporary std-pair

通常,变量声明中的=被编译器视为移动构造。例如:

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>

1 个答案:

答案 0 :(得分:0)

std::make_pair 返回 pair 对象的右值,然后赋值运算符 = 将右值移动到左值,因为 std::pair 已经定义了 copy/move assignment operator

“对类对象的赋值由复制/移动赋值运算符定义。”

参考:Cpp11 Standard 5.17 赋值和复合赋值运算符。