C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – std :: vector :: emplace_back和std :: move大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用std :: vector :: emplace_BACk和std :: move一起有什么优势吗?或者它只是冗余,因为Std :: vector :: emplace_BACk会做@L_616_0@inplace-construction?

澄清情况:

std::vector<std::string> bar;

第一:

bar.emplace_BACk(std::move(std::string("some_String")));

第二:

std::string str("some_String");
bar.emplace_BACk(std::move(str));

第三:

bar.emplace_BACk(std::move("some_String"));

解决方法

在第二个版本中,是的.当使用std :: move时,调用emplace_BACk将调用std :: String的移动构造函数,这可以保存在副本上(只要该字符串不存储在SSO缓冲区中).请注意,这在本例中与push_BACk基本相同.

std ::在第@L_616_0@版本中移动是不必要的,因为字符串已经是prvalue.

std :: move在第三个版本是无关紧要的,因为字符串文字不能被移动.

最简单和最有效的方法是:

bar.emplace_BACk("some_String");

这不需要不必要的std :: String结构,因为文字完美地转发给构造函数.

大佬总结

以上是大佬教程为你收集整理的c – std :: vector :: emplace_back和std :: move全部内容,希望文章能够帮你解决c – std :: vector :: emplace_back和std :: move所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。