从函数返回局部变量的引用不会给出错误

时间:2012-07-26 10:04:12

标签: c++ variables reference return

#include<iostream>
#include<conio.h>

using namespace std;

 /* test class: created the reference of 
    abc class locally in function getRef() 
    and returned the reference.*/

class abc {
    int var;

    public:
        abc():var(5) {}
        abc(int v):var(v) {}
        abc & getRef() {
            abc myref(9);
            return myref;
        }
        void disp() {
            cout<<var<<endl;
        }       
};

int main() {
    abc a;
    abc b=a.getRef(); 
    b.disp();  /* this statement executed perfectly. 
               I think compiler should throw error here. */
    getch();
    return 0;
}

编译器应该抛出编译错误。请解释一下?

2 个答案:

答案 0 :(得分:1)

编译器不应将b.disp();标记为错误,因为这不是错误所在。错误在return myref;,并且这不是一个硬错误的原因是,通常很难确定对象的生命周期是否会在return之后结束。在这种情况下,它很容易,一些编译器会尝试警告它。检查你的警告级别。

编辑:顺便说一下,使用gcc,默认情况下启用警告,看起来像“警告:引用本地变量'......'返回”。

答案 1 :(得分:0)

G ++会警告你这个问题,但它不应该是错误的,当然不是b.disp();,因为你实际上并没有使用该行的返回值而你< em>在上面的行中复制。

: In member function ‘abc& abc::getRef()’:
:17: warning: reference to local variable ‘myref’ returned

如果您的编译器没有就此发出警告,请check your warning level

此外:

#include<conio.h>

This does not make for portable code.