c++ - = make_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重的东西s,但问题仍然存在。这里是临时搭建的吗?如果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>在这种情况下创建?

最佳答案

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

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

引用:Cpp11 标准 5.17 赋值和复合赋值运算符。

https://stackoverflow.com/questions/33998991/

相关文章:

javascript - jsPDF addHTML 获取滚动元素的全部内容

maven - 当通过存储库访问父 pom 时,将忽略父 pom 中的

javascript - 如何实现用户可自定义的键盘快捷键(在 javascript 中/在网络上)

reactjs - ReactJS 中的嵌入式文档查看器控件

java - 如何使用 Mysql JDBC 驱动连接 Android 和 MySQL

java - 玩2.4,报错: package play. *不存在

laravel - 如何通过 Storage Facade(在 Laravel 5 中)获取下载文件

c++ - IUpdateSearcher 性能问题

css - 跨浏览器字体大小

r - 升级 R/R Studio 后出现 fatal error (无效的事件开发人员路径)