以下代码错了吗?我正在返回对本地变量的引用...它应该是核心转储,但它正在执行正常。以下代码在我的系统上运行正常,因为我是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;
}
答案 0 :(得分:8)
it should core dump
- 不。它是未定义的行为,任何事情都可能发生,包括似乎工作(这很糟糕,因为它可以隐藏错误)。
以下代码在我的系统上运行正常,因为我很幸运吗?
不,因为你运气不好。
答案 1 :(得分:5)
我正在返回对本地变量的引用......它应该是核心转储
错误。它是 undefined 。它可以做任何它喜欢的事情。对象在堆栈中,它仍然可以访问,因此您可以使用它。
是的,你很幸运。如果它是真实的代码,它将不被视为好运气; “这段代码包含一个严重的错误,但它恰好工作正常。我很幸运吗?”自己回答。