簡體   English   中英

是否在?:expression中創建的C ++臨時對象的生命周期是通過將其綁定到本地const引用來擴展的?

[英]Is the lifetime of a C++ temporary object created in ?: expression extended by binding it to a local const reference?

我不清楚臨時對象的生命周期是通過將它綁定到?:表達式中的const引用來擴展的:

class Foo {...};

Foo *someLValue = ...;

const Foo& = someLValue ? *someLValue : Foo();

通過將默認構造函數Foo()通過綁定到本地const ref來擴展創建臨時文件的生命周期,即使綁定是有條件的嗎? 或者這會創建一個懸空引用,因為Foo()的臨時值將在?:表達式的末尾被銷毀?

在此代碼中,條件運算符的第二個和第三個操作數具有不同的值類別(左值和右值)。

這意味着條件運算符的結果是Foo類型的prvalue,它表示從所選操作數復制初始化的臨時對象。

引用直接綁定到此臨時對象,因此臨時生命周期延長。

筆記:

  • 引用永遠不會直接綁定到*someLValue ,甚至也不會綁定到Foo()
  • Foo()初始化的臨時值是一個復制省略上下文,因此在這種情況下您可能無法觀察到臨時值。
  • 臨時是非const即使引用是const

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM