我有以下代码,我想知道为什么它写出“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 参数被破坏
为什么参考仍然有效?
简短的回答:这是无效的,它只是碰巧有效。
长答案:你的事件顺序是正确的。该引用指向超出范围的变量(在构造函数的末尾)。因此,它是一个悬空引用。从那时起对该引用的任何使用都会表现出未定义的行为。在这种情况下,它恰好打印出该值,但它也可以轻松地执行其他任何操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)