警告:返回对本地临时对象的引用

时间:2017-02-19 17:17:47

标签: c++ clang

编译以下内容:

document.getElementsByClassName()

使用clang

产生以下警告
<modal>
  <a slot="trigger">Show Modal</a>
  <h3 slot="header">My Heading</h3>
  <p slot="body">Here is the body of the modal.</p>
  <div slot="footer">
    Here is the footer, with a button to close the modal.
    <button class="close-modal">Close Modal</button>
  </div>
</modal>

这有道理,但C ++ 11中的新措辞似乎意味着将一个const引用返回到一个值会延长它的生命周期,直到引用超出范围?

目前的草稿并不适合我,所以我会引用cppreference.com:

  

临时对象的生命周期可以通过绑定到const左值引用或右值引用来扩展(自C ++ 11起),请参阅参考初始化以获取详细信息。

1 个答案:

答案 0 :(得分:2)

不,“返回引用”并不会神奇地延长任何生命周期。

生命周期延长的唯一时间是prvalue(或引用prvalue成员的xvalue)绑定到引用变量,并且prvalue的生命周期延长到变量:

struct Foo{};

{
    const auto & r = Foo{};   // Foo object not destroyed at semicolon...
    // ...
}
// ... but is destroyed only here.

您的prvalue不受任何变量的约束,因此不会延长生命周期。

(另请注意,非静态类数据成员不会将此作为“变量”计算,因此如果您的类恰好有引用成员,也无法通过构造函数初始化程序列表延长生命周期。)