临时通过参考功能的生命周期

时间:2015-05-29 00:15:17

标签: c++

我可以这样做:

const int &i = 5;

并将临时的生命周期延长到i的生命周期。

但是怎么样

const int &fun (const int &i){
    return i;
}

int main () {
    const int &r = fun(5);
    // Can I use r here?
}

代理-5的生命周期是否仍然延长?或r悬挂参考?

2 个答案:

答案 0 :(得分:5)

这是一个悬垂的参考。来自[class.temporary] / 4-5:

  

有两种情况下,临时表在不同于完整表达结束时被摧毁。   第一个上下文是调用默认构造函数[...]

     

第二个上下文是引用绑定到临时的。引用所在的临时值   绑定或临时,即绑定引用的子对象的完整对象仍然存在   对于参考的生命周期,除了:

     
      
  • 临时绑定到构造函数的 ctor-initializer [...]
  • 中的引用成员   
  • 函数调用(5.2.2)中与引用参数的临时绑定持续,直到完成   包含调用的完整表达式
  •   
  • [...]
  •   

5一直持续到包含调用的完整表达式完成,也就是说:

const int &r = fun(5);
// <== no more 5

答案 1 :(得分:4)

不,我不相信。您将5绑定到fun的参数的引用,因此只要该参数持续,它就会持续。该参数仅持续调用fun的持续时间。

this previous question中探讨了相关的标准文本。