0 c++
我在Visual studio中运行了下面的代码,并期望得到运行时或某种错误.我一无所获,绝对没有.我得到了输出代码9,注释出来并获得了3.我在键盘上运行它并且它也没有给我任何错误.
是否有编译器会告诉我这段代码不正确?如果它是正确的,为什么呢?我知道const A&是合法的,但下面的AFAIK不是.
class A
{
public:
int v;
A& get()
{
return *this;
}
};
A& func()
{
A a;
a.v=3;
return a.get();
}
int main()
{
A& v = func();
v.v=9;
return v.v;
}
Run Code Online (Sandbox Code Playgroud)
未定义的行为是未定义的行为.你不能指望它特别做任何事情,包括崩溃.
没有我知道的编译器可以捕获所有类型的UB,我认为不可能.您可以提高编译器的警告级别,但我认为它甚至不会警告您.我相信,使用get()作为捕获对局部变量的引用的方法,将有效地隐藏这一事实,即如果不是所有编译器,这就是你正在做的事情.在我看来,抓住这种自杀事件所需的努力量似乎不值得.
这只是C++开发人员生活的一部分.