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

use*_*741 0 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;
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 8

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

以下代码在我的系统上工作正常,因为我是LUCKY?

不,因为你不走运.


Ela*_*zar 5

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

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

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