在此代码中:
SomeClass& some_object = SomeClass();
some_object是指什么?有效吗?还是未定义的行为?
答案 0 :(得分:2)
根据标准,这是无效的。但是,一些编译器(特别是MSVC)将允许它作为扩展。
允许 分配临时引用到const,这将导致临时的生命周期延长到引用的生命周期:
{
const SomeClass& some_object = SomeClass();
// more code, some_object is valid
} //some_object is destructed here
答案 1 :(得分:1)
无效,因为不应该编译:
右值不能绑定到非const
左值参考。
但有些编译器,例如MSVC,允许将非const
左值引用绑定rvalues作为编译器扩展。
答案 2 :(得分:0)
根本没有编译。
不允许将非const引用(T&
)绑定到临时对象。您可以将临时值绑定到const T&
,或者从C ++ 11开始绑定T&&
,但是:
const SomeClass& obj = SomeClass();
SomeClass&& obj = SomeClass();