我可以这样做:
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是一个悬空的引用?
发布于 2015-05-29 00:17:10
这是个悬空的参考资料。临时/4-5级:
有两种情况下,时间被摧毁在一个不同的点,而不是完全表达式的结尾。第一个上下文是在调用默认构造函数时. 第二个上下文是将引用绑定到临时上下文。引用绑定到的临时对象或作为引用绑定的子对象的完整对象的临时对象在引用的生存期内持续存在,但以下情况除外:
5一直保持到包含调用的完整表达式完成为止,也就是说:
const int &r = fun(5);
// <== no more 5发布于 2015-05-29 00:16:45
不,我不这么认为。您将5绑定到指向fun的参数的引用,因此只要该参数持续很长时间,它就会持续。该参数仅在调用fun的持续时间内持续。
在this previous question中对相关的标准文本进行了探讨。
https://stackoverflow.com/questions/30519148
复制相似问题