我有以下代码(简化版):
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)的临时对象在引用的生存期内一直存在。”在这种情况下,引用的生存期在赋值表达式的末尾结束,临时整数的生存期也是如此。