考虑以下处理 const 引用的代码:
const int & func (const int &x)
{
return x;
}
struct Foo {
Foo (const int &x)
: m_x(x) {}
const int & getX ()
{ return m_x; }
const int &m_x;
};
我想知道现在允许以下哪些(如果有):
int x = func(int(7));
int y = Foo(int(7)).getX();
是否可以保证临时int
对象在分配或使用之前仍然存在getX
?
更新:所以看起来这是安全的 - 但究竟为什么呢?
- 是因为临时对象递归地绑定到 const 引用并且只要对它们的绑定引用存在就保证存在?
- 或者是因为它们保证在完整表达式的持续时间内存在?
考虑存储指针而不是引用的边缘情况:
struct Foo {
Foo (const int &x)
: m_x(&x) {}
const int & getX ()
{ return *m_x; }
const int *m_x;
};
int y = Foo(int(7)).getX();
似乎如果案例 1) 是正确的,这将不起作用。但如果情况 2) 是正确的,它会。