[英]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.