为什么不允许获取非const引用到临时对象,这是由函数getx()
返回的?
显然,C++标准禁止这样做,但我对此限制的目的感兴趣,而不是参考标准。
struct X
{
X& ref() { return *this; }
};
X getx() { return X();}
void g(X & x) {}
int f()
{
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;
}
- 很明显,对象的生命周期不可能是原因,因为C++标准并没有禁止对常量对象进行引用。
- 在上面的示例中,临时对象显然不是常量,因为可以调用非常量函数。例如,
ref()
可能会修改临时对象。 - 此外,
ref()
允许你欺骗编译器,并获得对临时对象的引用,从而解决了我们的问题。
另外:
他们说“将临时对象分配给const引用可以延长该对象的生命周期”,但“对于非const引用则没有任何说明”。 我的附加问题是:以下赋值是否延长了临时对象的生命周期?
X& x = getx().ref(); // OK