gpt4 book ai didi

c++ - 函数的右值引用和返回值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:12 25 4
gpt4 key购买 nike

我是 c++11 的新手,在阅读 C++11 FAQ 时有以下问题.

假设我们有一个函数f(),它返回一个类型为X的值,那么我们有以下方法来存储它的返回值:

X a = f();    // copy assignment
X&& b = f(); // move assignment

根据 C++ FAQ , 第二个避免了不必要的复制。

我的问题是:第二种方式是否总是接收函数调用返回值的首选方式?另外,auto c = f(); 是否等同于上述赋值之一?谢谢。

最佳答案

您错误地标记了这些行。它们都不是作业,更不用说分别复制和 move 作业了。相反,第一个涉及复制/move 构造(取决于 X 是否有一个 move 构造函数),第二个只是初始化一个引用。

接收函数调用返回值的首选方式是第一种方式:

X a = f();

f() 返回的临时对象到对象 a 的拷贝几乎肯定会被删除。这与 auto c = f(); 将采用的形式相同。

第二个应该很少出现在您的代码中。您正在对 f() 的返回类型进行右值引用。 Stroustrup 这样做只是为了证明临时对象可以绑定(bind)到右值引用。当您调用具有右值引用参数类型的 move 构造函数/赋值运算符时,这种情况在实际代码中最常发生。

关于c++ - 函数的右值引用和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com