在 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
是一个悬空引用。我对么?