これは出力されますF~
が、私は期待していました~F
#include <iostream>
struct Foo {
int _x;
operator const int & () const {return _x;}
~ Foo () {std :: cout << "~";}
};
void foo (const int &)
{
std :: cout << "F";
}
int main ()
{
foo (Foo ());
}
Most-important-const がルールではなく例外であることを示す反例として、これを作成しました。通常は次のように記述されます。
const 参照が一時オブジェクトにバインドされると、その一時オブジェクトの有効期間が参照の有効期間まで延長されます。
Foo()
は一時的なものです_x
が、変換演算子によって返されるへの参照はそうではなく、上記のコードは安全ではないことを説明しようとしました。
しかし、出力は、例が安全であることを証明しているようです.一時の寿命はFoo()
、そのメンバーの1つへのconst参照の存在によって延長されます.
これは正しいですか?これは標準のどこに指定されていますか?