为新创建的堆栈分配对象分配引用时会发生什么?

时间:2015-10-21 09:56:37

标签: c++ memory-management reference stack

在此代码中:

SomeClass& some_object = SomeClass();

some_object是指什么?有效吗?还是未定义的行为?

3 个答案:

答案 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();