C++ 中的引用范围是什么?


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 端 2

我预计引用会出错,因为函数中的变量已被终止。但是,析构函数被调用并且主函数工作。参考指向什么?

引用引用已删除的对象。这是一个悬而未决的参考。因此,程序具有未定义的行为。

在这种特殊情况下,输出看起来是正确的,只是因为已删除对象占用的内存尚未被覆盖。

您正在返回对局部变量的引用。当函数返回并且您的引用悬而未决时,变量将死亡。返回后,引用指向已失效的内容,并且使用该引用会导致未定义的行为。

fu& fub() {
fu a;
fu& re = a;
return a;
// a is dead now
}

您可以通过编译器警告轻松检测到它,例如-Wallg++ 上。

住在神霹雳上。

最新更新