在c ++中返回对局部变量的引用

时间:2013-07-04 17:57:42

标签: c++

以下代码错了吗?我正在返回对本地变量的引用...它应该是核心转储,但它正在执行正常。以下代码在我的系统上运行正常,因为我是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;
}

2 个答案:

答案 0 :(得分:8)

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

  

以下代码在我的系统上运行正常,因为我很幸运吗?

不,因为你运气不好

答案 1 :(得分:5)

  

我正在返回对本地变量的引用......它应该是核心转储

错误。它是 undefined 。它可以做任何它喜欢的事情。对象在堆栈中,它仍然可以访问,因此您可以使用它。

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