我对从函数返回局部变量的引用有一些疑问:
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
}
我的问题如下:
getA1()
的实现是否正确?我感觉它是错误的,因为它返回的是本地变量或临时变量的地址。main
中哪个语句(1、2、3)会导致未定义的行为?在
const A& newA1 = getA1();
中,标准是否保证一个被const引用绑定的临时对象在引用超出作用域前不会被销毁?