c – 返回右值引用vs函数返回类型中的值返回
发布时间:2020-12-16 09:57:13 所属栏目:百科 来源:网络整理
导读:参见英文答案 c++11 Return value optimization or move? ????????????????????????????????????4个 在我的代码中,我有一个函数,它从一段数据构造一个字符串然后返回它.此字符串不会在其他任何地方使用,因此接收方可以安全地使用移动分配或移动初始化. std::
参见英文答案 >
c++11 Return value optimization or move? ????????????????????????????????????4个
在我的代码中,我有一个函数,它从一段数据构造一个字符串然后返回它.此字符串不会在其他任何地方使用,因此接收方可以安全地使用移动分配或移动初始化. std::string ReadString(...) { ... return std::string(...) } 这基本上就是我所拥有的. std::string&& ReadString(...) { ... return std::string(...) } 我担心的是,当我们返回字符串时可能会有一个多余的副本,并且可以通过使返回类型为右值引用来缓解它. 我怀疑编译器也可以针对这些场景进行优化,但是,我不确定. 所以问题是 – 在这种情况下,返回类型是否为rvalue引用有什么意义?为什么?此外,如果没有,那么返回右值引用的函数有哪些可能的应用程序? 谢谢. 解决方法
返回对即将销毁的对象的引用总是错误的:引用的对象在以任何形式使用之前都将被销毁.使引用成为右值引用不会改变它,它只是返回一个临时编译.
请注意,按值返回临时字符串可能会导致复制省略,即对象可能会直接在使用它的位置构建.如果没有发生,如果有一个返回类型的移动构造函数(存在std :: string),则将移动该对象.请注意,返回函数局部变量而不是临时变量时也是如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |