下面的代码是错误的?我正在返回对本地变量的引用...它应该是核心转储,但它正在执行正常.以下代码在我的系统上工作正常,因为我是LUCKY?
#include<iostream>
using namespace std;
class a{
public:
int i;
int arr[20];
a()
{
cout<<"\ninside constructor";
i=10;
}
public:
static a& ret()
{
a chk;
return chk;
}
void say()
{
i=10;
arr[0]=1;
cout<<"\nHello World\n";
}
};
int main()
{
(a::ret()).say();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
it should core dump- 不.它是未定义的行为,任何事情都可能发生,包括似乎工作(这很糟糕,因为它可以隐藏错误).
以下代码在我的系统上工作正常,因为我是LUCKY?
不,因为你不走运.
我正在返回对本地变量的引用...它应该是核心转储
错误.它是未定义的.它可以做任何它喜欢的事情.对象在堆栈中,它仍然可以访问,因此您可以使用它.
是的,你很幸运.如果是在真正的代码,它不会被认为是一个好运气; "这段代码包含一个严重的错误,但它恰好工作正常.我很幸运吗?" 自己回答.