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

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

4

2 回答 2

1

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

编辑:顺便说一句,使用gcc,警告默认启用,看起来像“警告:对局部变量'...'的引用返回”。

于 2012-07-26T10:12:14.897 回答
0

G++ 会适当地警告你,但它不应该出错,当然也不会出现在 at b.disp();,因为你实际上并没有在该行上使用返回值,而是在上面的行上复制了它。

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

如果您的编译器没有对此发出警告,请检查您的警告级别

还:

#include<conio.h>

这不适用于可移植代码。

于 2012-07-26T10:14:37.443 回答