为什么不允许获取对临时对象的非常量引用,哪个函数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