テンポラリーを非 const 参照にバインドできないことはわかっていますが、const 参照にはバインドできます。あれは、
A & x = A(); //error
const A & y = A(); //ok
A()
また、2 番目のケース (上記) では、作成された一時オブジェクトの有効期間が、const 参照の有効期間 (つまり ) まで延長されることも知っていy
ます。
しかし、私の質問は次のとおりです。
一時オブジェクトにバインドされている const 参照をさらに別の const 参照にバインドして、一時オブジェクトの有効期間を 2 番目のオブジェクトの有効期間まで延長できますか?
私はこれを試しましたが、うまくいきませんでした。私はこれを正確に理解していません。私はこのコードを書きました:
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()
出力の違い?2 番目のケースで一時オブジェクトA()
がオブジェクトの前に破棄されるのはなぜですか? b
標準 (C++03) はこの動作について話していますか?