訪問懸空參考
訪問對超出範圍或以其他方式銷燬的物件的引用是非法的。據說這樣的引用是*懸空的,*因為它不再引用有效的物件。
#include <iostream>
int& getX() {
int x = 42;
return x;
}
int main() {
int& r = getX();
std::cout << r << "\n";
}
在此示例中,當 getX
返回時,區域性變數 x
超出範圍。 (請注意,生命週期擴充套件不能將區域性變數的生命週期延長到超出定義它的塊的範圍。)因此,r
是一個懸空引用。該程式具有未定義的行為,儘管在某些情況下它似乎可以工作並列印 42
。