提问人:Jonathan Mee 提问时间:11/30/2015 最后编辑:Jonathan Mee 更新时间:4/15/2021 访问量:2477
= make_pair 是否调用复制构造函数?
Does = make_pair Invoke the Copy Constructor?
问:
通常,编译器将变量声明中的 视为移动构造。例如:=
vector<int> foo = vector<int>(13, 0);
将调用构造函数。vector<int>::vector<int>(vector<int>&&)
这如何与?如果我这样做,我是否正在构建一个临时的并移动它:make_pair
pair<int, int> foo = make_pair(13, 0);
显然,后果变得更加重要,因为 中的类型比 s 重,但问题保持不变。这里是临时建造的吗?如果强制临时,我想我可以调用: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赞
Yong Yang
4/15/2021
#1
std::make_pair
返回对对象的 rvalue,然后赋值运算符将右值移动到左值,因为 std::p air 定义了复制/移动赋值运算符。=
“对类对象的赋值由复制/移动赋值运算符定义。”
参考:Cpp11 标准 5.17 赋值和复合赋值运算符。
评论
T t = whatever;