C++ ではconst
、一時的なものへの参照を使用することが有効です。
const std::string& s = std::string("abc");
std::cout << s.length() << std::endl; // valid because string instance is still alive
しかし、一時が別の型からの変換によって作成された場合、これは当てはまりますか?
例えば:
struct Foo
{
~Foo()
{
cout << "Foo destructor?" << endl;
}
};
struct Bar
{
operator Foo()
{
return Foo();
}
~Bar()
{
cout << "Destructor" << endl;
}
};
Foo getFoo()
{
return Foo();
}
Bar getBar()
{
return Bar();
}
int main()
{
const Foo& f = getBar();
/* is f valid here, or is it a dangling reference? */
std::cout << "We're still in main!" << std::endl;
}
Bar のデストラクタが出力の前に 呼び出されることに注意してください。私は正しいですか?We're still in main
Foo& f