对函数返回值的引用

Reference to return value of function

本文关键字:引用 返回值 函数      更新时间:2023-10-16

我很困惑是否在下面的代码片段foo保证是有效的,即,是否允许我将函数返回值存储为const引用?

我之所以问,是因为返回值存储在堆栈帧中,在返回值后不久可能无效。

Foo getFoo() {
   return Foo();
}
void bar() {
  const auto& foo = getFoo();
  // more function calls...
  // is foo guaranteed to be valid?
}

这是有效的c++,但是要注意一些编译器(例如Visual Studio 2015,据我所知)不正确实现

按标准(N4140):

<

12.2临时对象/strong>

4在两种上下文中,临时变量在fulexpression结束后的不同位置被销毁。第一个上下文是调用默认构造函数初始化数组元素的时候。如果构造函数有一个或多个默认参数,销毁在默认值中创建的每个临时参数参数在构造下一个数组元素(如果有)之前进行排序。

5第二个上下文是当引用绑定到临时对象时。引用所在的临时对象bind 或引用绑定到的子对象的完整对象的临时对象持久存在对于引用的生命周期,除了:

(一些例外)