gpt4 book ai didi

c++ - 按值返回时强制 RVO/移动构造

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

假设我有一个带有复制构造函数和移动构造函数的对象“foo”,以及一个函数

foo f() {
foo bar;
/* do some work */
return bar;
}

该标准似乎声明编译器将尝试执行以下操作:NRVO,按右值引用返回,按值返回,失败;按照这个顺序。

有什么方法可以强制编译器永远不按值返回,因为我的复制构造函数非常昂贵吗?

最佳答案

the compiler will try to do: NRVO, return by r-value ref, return by value, fail; in that order.

上面的措辞不准确,可能表明您有误解。编译器可以使用 NRVO(大多数会),如果它不可用,它总是按值返回,不同之处在于返回值的构造方式。如果您的类型有移动构造函数,编译器必须使用该构造函数,并且只有在您的类型没有移动构造函数时才会使用复制构造函数。

也就是说,如果您的类型具有移动构造函数,则使用复制构造函数的编译器将不符合 C++11。

关于c++ - 按值返回时强制 RVO/移动构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557410/

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