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

What happens when you assign a reference to a newly-created stack-allocated object?

本文关键字:分配 对象 堆栈 什么 引用 新创建 创建      更新时间:2023-10-16

在此代码中:

SomeClass& some_object = SomeClass();

some_object指的是什么?它有效吗?或者没有定义的行为?

根据标准这是无效的。然而,一些编译器(特别是MSVC)将允许它作为扩展。

允许给const引用赋值一个临时对象,这将导致该临时对象的生命周期延长到引用的生命周期:

{
    const SomeClass& some_object = SomeClass();
    // more code, some_object is valid
} //some_object is destructed here

这是无效的,因为不应该编译:

右值不能绑定到非const左值引用。

然而,一些编译器,例如MSVC,允许将右值绑定到非const左值引用,作为编译器的扩展。

根本无法编译。

非const引用(T&)不允许绑定到临时对象。您可以将临时绑定到const T&,或者从c++ 11开始绑定到T&&,但是:

const SomeClass& obj = SomeClass();
SomeClass&& obj = SomeClass();