0

下面的代码错了吗?我正在返回对局部变量的引用......它应该是核心转储,但它执行得很好。下面的代码在我的系统上工作正常吗,因为我很幸运?

#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;
}
4

2 回答 2

8

it should core dump- 不。这是未定义的行为,任何事情都可能发生,包括看起来有效(这很糟糕,因为它可以隐藏错误)。

下面的代码在我的系统上工作正常吗,因为我很幸运?

不,因为你不走运

于 2013-07-04T18:00:30.093 回答
5

我正在返回对局部变量的引用......它应该核心转储

错误的。它是未定义的。它可以为所欲为。该对象在堆栈上,它仍然可以访问,因此您可以使用它。

是的,你很幸运。如果是在真实的代码中,就不会被认为是幸运的;“这段代码包含一个严重的错误,但它恰好工作正常。我幸运吗”?自己回答。

于 2013-07-04T18:00:15.917 回答