我有以下代码,我想知道为什么它写出“22”而不是垃圾
class example
{
public:
example(int ea) : ref(ea)
{
}
int& ref;
};
int main ()
{
example obj(22);
cout << obj.ref; // Writes out 22
return 0;
}
我认为这应该发生:
- obj(22) 将 22 隐式转换为临时整数
- 整数复制到int ea参数
- ref 使用对 ea 参数的引用进行初始化
- ea参数被销毁
为什么引用仍然有效?
最佳答案
简短回答:它无效,它恰好有效。
长答案:您的事件顺序是正确的。引用指向一个超出范围的变量(在构造函数的末尾)。因此,它是一个悬空引用。从那时起对该引用的任何使用都表现出未定义的行为。在本例中,它恰好打印出值,但它也可以轻松地执行任何其他操作。
关于C++ 使用参数初始化引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770459/