对函数返回值的引用
Reference to return value of function
我很困惑是否在下面的代码片段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 或引用绑定到的子对象的完整对象的临时对象持久存在对于引用的生命周期,除了:
(一些例外)
相关文章:
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- C++对象引用返回不同的值
- 返回 std::tuple 中的引用和值
- 直接在 C++ 中将值分配给引用返回类型
- 是否未定义将对函数范围变量的引用作为值返回
- 可以通过常量引用返回默认参数的值吗?
- 我可以从取消引用"new"的返回值初始化引用吗
- C++ std::map 的返回值引用
- 按值与右值引用返回
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 通过引用将函数传递给 TBB 任务时无法返回值
- C++复制按引用返回和按常量引用值返回
- 这安全吗?右值和引用返回值
- 引用返回值时出错
- 引用返回值和右值
- c++ const引用返回值的c#类比是什么?
- 在哪些情况下(const)引用返回值是不安全的?
- 将引用返回值赋给非引用变量
- c++ 11本地命名引用返回值(xvalue)