c++中的引用范围是啥? [复制]
Posted
技术标签:
【中文标题】c++中的引用范围是啥? [复制]【英文标题】:What is the scope of references in c++? [duplicate]c++中的引用范围是什么? [复制] 【发布时间】:2019-12-08 11:04:52 【问题描述】: class fu
public:
int pub;
fu() pub = 1;
~fu()
std::cout << pub << "end"<<std::endl;
;
fu& fub()
fu a;
fu& re = a;
return a;
int main()
std::cout << ++fub().pub;
输出:1 结束 \n 2
我预计引用会出错,因为函数中的变量已终止。但是,调用了析构函数并且 main 函数起作用了。参考指向什么?
【问题讨论】:
这能回答你的问题吗? Can a local variable's memory be accessed outside its scope?讲的是指针,但是引用的结果是一样的。 你所拥有的是未定义的行为。 【参考方案1】:引用指向已删除的对象。这是一个悬空的参考。因此,程序具有未定义的行为。
在这种特殊情况下,输出看起来正确只是因为被删除对象占用的内存还没有被覆盖。
【讨论】:
【参考方案2】:您正在返回对局部变量的引用。当函数返回并且您的引用悬空时,该变量就会消失。在返回指向已死对象的引用后,使用该引用会导致未定义的行为。
fu& fub()
fu a;
fu& re = a;
return a;
// a is dead now
您可以通过编译器警告轻松检测到它,例如-Wall
在 g++ 上。
直播Godbolt。
【讨论】:
以上是关于c++中的引用范围是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章