我有以下代码(简化版):

const int& function( const int& param )
{
     return param;
}

const int& reference = function( 10 );
//use reference

我无法完全确定C++ 03 Standard $ 12.2/5的措辞程度



在这里适用。

上面代码中的reference变量有效还是悬空?调用代码中的引用会延长作为参数传递的临时项的生命周期吗?

最佳答案

完整表达式是一个表达式,它不是另一个表达式的子表达式。在这种情况下,包含调用function( 10 )的完整表达式是赋值表达式:

const int& reference = function( 10 );
为了使用参数function调用10,将为临时整数对象10创建一个临时const-reference对象。临时整数和临时const引用的生命周期会贯穿整个赋值,因此,尽管赋值表达式有效,但尝试使用reference引用的整数是未定义行为,因为reference不再引用 Activity 对象。
我认为,C++ 11标准阐明了这种情况:

“引用所绑定(bind)的临时对象在引用的生存期内一直存在。”在这种情况下,引用的生存期在赋值表达式的末尾结束,临时整数的生存期也是如此。

07-24 09:45
查看更多