绑定到函数参数的引用是否会延长该临时的生命周期?

sha*_*oth 9 c++ reference object-lifetime function-parameter

我有这个代码(简化版):

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

const int& reference = function( 10 );
//use reference
Run Code Online (Sandbox Code Playgroud)

我不能完全决定C++ 03标准在12.2/5美元的措辞

引用绑定的临时对象或作为临时绑定的子对象的完整对象的临时对象在引用的生命周期内持续存在...

适用于此.

reference在上述有效或晃来晃去的代码变量?调用代码中的引用是否会延长作为参数传递的临时值的生命周期?

Dan*_*ien 10

全表达为不是另一种表达的子表达式的表达式.在这种情况下,包含调用的full-expression function( 10 )是赋值表达式:

const int& reference = function( 10 );
Run Code Online (Sandbox Code Playgroud)

为了function使用参数调用,10将为临时整数对象创建临时const引用对象10.临时整数的生命周期和临时const-reference通过赋值扩展,因此尽管赋值表达式有效,但尝试使用引用的整数reference是Undefined Behavior,因为它reference不再引用活动对象.

我认为,C++ 11标准澄清了这种情况:

绑定引用的临时对象或绑定引用的子对象的完整对象的临时对象在引用的生命周期内持续存在,除了:

...

- 函数调用(5.2.2)中的引用参数的临时绑定将持续到包含该调用的完整表达式完成为止.

"引用绑定的临时值......在引用的生命周期内持续存在".在这种情况下,引用的生存期在赋值表达式的末尾结束,临时整数的生存期也是如此.