下面是代码片段:
#include <iostream>
using namespace std;
struct B{
int b;
~B(){cout <<"destruct B" << endl;}
};
B func(){
B b;
b.b = 1;
return b;
}
int main(){
const B& instance = (const B&)func(); //is `instance` a dangling reference?
cout <<instance.b<<endl;
return 0;
}
在这个在线编译器中,输出是
destruct B
destruct B
1
所以返回值似乎比cout
操作更早破坏。所以这instance
似乎是一个悬而未决的参考。
如果我们更改const B& instance = (const B&)func();
为 const B& instance =func();
,那么结果是
destruct B
1
destruct B
作为补充,如果我在vs2015中测试代码,那么输出就是最后一个。但是,如果在gcc(4.6 之前)中测试,输出是前者,但在 4.6 之后的版本中是后者。所以我想知道是在线编译器错误还是引用实际上是悬空的。