访问悬空参考
访问对超出范围或以其他方式销毁的对象的引用是非法的。据说这样的引用是*悬空的,*因为它不再引用有效的对象。
#include <iostream>
int& getX() {
int x = 42;
return x;
}
int main() {
int& r = getX();
std::cout << r << "\n";
}
在此示例中,当 getX
返回时,局部变量 x
超出范围。 (请注意,生命周期扩展不能将局部变量的生命周期延长到超出定义它的块的范围。)因此,r
是一个悬空引用。该程序具有未定义的行为,尽管在某些情况下它似乎可以工作并打印 42
。