#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;
}
编译器应该抛出编译错误。请解释一下?
答案 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>