gpt4 book ai didi

C++:RVO、NRVO 和返回本地对象

转载 作者:行者123 更新时间:2023-11-28 00:20:28 25 4
gpt4 key购买 nike

我刚刚了解了 RVO(返回值优化)和 NRVO(命名返回值优化)。下面是两个例子

//Example of RVO
Bar Foo()
{
return Bar();
}

//Example of NVRO
Bar Foo()
{
Bar bar;
return bar;
}

这是有道理的,一个很好的编译器优化。然而,我从 Stanley Lippman 的“C++ primer”中读到“Never return a Reference or Pointer to a Local Object”(ch 6.3.2),示例代码是

//disaster: this function returns a reference to a local object
const string &manip()
{
string ret;
// transform ret in some way
if (!ret.empty())
return ret; // WRONG: returning a reference to a local object!
else
return "Empty"; // WRONG: "Empty" is a local temporary string
}

我不明白,这个例子与 RVO 例子有什么不同吗?如果它们相同,我如何确保编译器将进行 RVO 优化,而不是由于调用堆栈展开而导致未定义的行为?

最佳答案

它们是不同的。

Bar Foo();

按值返回,复制本地对象。

const string &manip();

按引用返回,返回一个局部对象本身,函数返回的同时引用无效。

关于C++:RVO、NRVO 和返回本地对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27717786/

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