我有一些关于从函数返回对局部变量的引用的问题:
class A {
public:
A(int xx)
: x(xx)
{
printf("A::A()\n");
}
};
const A& getA1()
{
A a(5);
return a;
}
A& getA2()
{
A a(5);
return a;
}
A getA3()
{
A a(5);
return a;
}
int main()
{
const A& newA1 = getA1(); //1
A& newA2 = getA2(); //2
A& newA3 = getA3(); //3
}
Run Code Online (Sandbox Code Playgroud)
我的问题是=>
执行getA1()是否正确?我觉得它是错误的,因为它返回局部变量的地址或临时变量.
main(1,2,3)中的哪些陈述会导致未定义的行为?
在const A& newA1 = getA1();做标准的保证,暂时由const引用约束不会被破坏,直到引用超出范围是什么?
可能重复:
返回对局部变量的引用
我碰巧发现这个代码返回5.可以这样写,或者一定要避免?
int& f() {
int i = 5;
return i;
}
int main(){
cout<<f()<<endl;
}
Run Code Online (Sandbox Code Playgroud)