【发布时间】:2010-12-23 22:23:26
【问题描述】:
关于 SO 上的常量引用的生命周期有几个问题,但我还是不明白。
这段代码有效吗?
struct S
{
const int &ref;
S( const int &x ) : ref(x) { }
};
int main( )
{
S s( 0 );
// ...
use( s.ref );
// ...
return 0;
}
直觉上我会说不,因为0 应该在计算表达式 (S s(0);) 后过期。
但是 GCC 和 CLANG 编译它都很好,没有警告,而且 valgrind 没有检测到任何运行时错误。
关于引用我缺少什么?
【问题讨论】:
-
当您将引用传递给接受引用的对象构造函数时,您可能会在所构造对象的生命周期内放弃引用。然后您有责任确保引用的对象比新构造的对象的寿命更长。
标签: c++ reference constants temporary lifetime