簡體   English   中英

自動&&超出范圍

[英]auto && outside range-for

我認為寫作是正確的嗎

auto && x = ...;

在范圍的for (...)部分之外幾乎幾乎沒有任何意義,因為如果右側確實是右值,則它通常會停止存在於分號處,然后x表示已被破壞的東西。

換一種說法:

Widget f () { ... }
...
auto && x = f();
// do something with x

是錯的?

從標准[class.temporary]:

在兩種情況下,臨時變量在與完整表達式結束時不同的位置被銷毀。 第一個上下文是調用默認構造函數初始化數組的元素時。

第二種情況是引用綁定到臨時項時。 引用所綁定的臨時對象或引用所綁定的子對象的完整對象的臨時對象在引用的生存期內一直存在,但以下情況除外:
—綁定到函數調用(5.2.2)中的參考參數的臨時對象一直存在,直到包含該調用的完整表達式完成。
—函數返回語句(6.6.3)中臨時綁定到返回值的生存期; 臨時在return語句中的全表達式結束時銷毀。
—持久綁定到new-initializer (5.3.4)中的引用,直到包含new-initializer的完整表達式完成。

auto&& x = f(); 屬於第二種情況,沒有例外適用。 因此,臨時變量在參考的整個生命周期中都存在。 因此,該代碼沒有錯。

暫無
暫無

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

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