我是 c++11 的新手,在阅读时有以下问题C++11 常见问题解答 http://www.stroustrup.com/C++11FAQ.html#rval.
假设我们有一个函数f
() 返回类型的值X
,那么我们有以下几种方式来存储它的返回值:
X a = f(); // copy assignment
X&& b = f(); // move assignment
根据C++ FAQ http://www.stroustrup.com/C++11FAQ.html#rval,第二个避免不必要的副本。
我的问题是:第二种方法是否始终是接收函数调用返回值的首选方式?此外,还有auto c = f();
相当于上述作业之一?谢谢。
您错误地标记了线条。它们都不是作业,更不用说分别复制和移动作业了。相反,第一个涉及复制/移动构造(取决于是否X
有一个移动构造函数),第二个只是初始化一个引用。
接收函数调用返回值的首选方法是第一种方法:
X a = f();
临时返回的副本f()
进入物体a
几乎肯定会被忽略。这与以下形式相同auto c = f();
会采取。
第二个应该很少(如果有的话)出现在您的代码中。您正在对返回类型进行右值引用f()
。 Stroustrup 这样做只是为了证明临时变量可以绑定到右值引用。当您调用具有右值引用参数类型的移动构造函数/赋值运算符时,这种情况在实际代码中最常发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)