我知道临时不能绑定到非常量引用,但可以绑定到常量引用。那是,
A & x = A(); //error
const A & y = A(); //ok
我也知道,在第二种情况下(上面),临时创建的生命周期会A()
延伸到 const 引用的生命周期(即y
)。
但我的问题是:
绑定到临时对象的 const 引用是否可以进一步绑定到另一个 const 引用,从而将临时对象的生命周期延长到第二个对象的生命周期?
我试过了,但没有用。我不完全明白这一点。我写了这段代码:
struct A
{
A() { std::cout << " A()" << std::endl; }
~A() { std::cout << "~A()" << std::endl; }
};
struct B
{
const A & a;
B(const A & a) : a(a) { std::cout << " B()" << std::endl; }
~B() { std::cout << "~B()" << std::endl; }
};
int main()
{
{
A a;
B b(a);
}
std::cout << "-----" << std::endl;
{
B b((A())); //extra braces are needed!
}
}
输出(ideone):
A()
B()
~B()
~A()
-----
A()
B()
~A()
~B()
输出差异?为什么在第二种情况下临时对象A()
在对象之前被破坏?b
标准 (C++03) 是否讨论过这种行为?