我可以做这样的事情:
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?
}
proxy-5 的生命周期还延长吗?或者是r
悬空参考?
这是一个悬空的参考。来自[class.temporary]/4-5:
在两种情况下,临时变量会在与完整表达式结束时不同的点被销毁。
第一个上下文是调用默认构造函数时 [ ... ]
第二个上下文是当引用绑定到临时对象时。引用的临时值
绑定或作为引用绑定到的子对象的完整对象的临时对象持续存在
在引用的生命周期内,除了:
- 临时绑定到构造函数中的引用成员构造函数初始化器 [ ...]
- 函数调用中引用参数的临时绑定仍然存在 (5.2.2)直到完成
包含调用的完整表达式.
- [...]
The 5
一直持续到包含调用的完整表达式完成为止,也就是说:
const int &r = fun(5);
// <== no more 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)