首頁 > 後端開發 > C++ > 主體

從 C 函數傳回的 Braced-Init-List 的生命週期是多少?

Patricia Arquette
發布: 2024-10-29 18:29:22
原創
649 人瀏覽過

 What is the Lifetime of a Braced-Init-List Returned from a C   Function?

花括號初始化清單傳回值的生命週期

在C 中,從函數傳回花括號初始化清單會引發下列問題:

問題概要

之前的分析表明,GCC 在返回表達式結束之前錯誤地終止了initializer_list 數組,而Clang錯誤地保留物件而不破壞它們。

標準解釋

根據 C 11 標準,帶有花括號初始化列表的 return 語句透過以下方式初始化傳回值複製清單初始化。如果傳回類型是 std::initializer_list 的特化,則從指定清單建構並初始化一個initializer_list物件。

陣列生命週期

建構的initializer_list儲存一個對從初始值設定項列表初始化的元素數組的引用。此陣列的生命週期被定義為與initializer_list 物件相同。這表示在 return 語句中,底層陣列是從花括號初始化清單初始化的,並且其生命週期延伸到呼叫範圍。

正確實作

因此,預期的行為是,initializer_list 的陣列應保留到呼叫函數中,從而允許其進一步使用或綁定到命名引用。然而,GCC 目前的實現過早地釋放了數組,違反了這一期望。

其他說明

  • 傳回花括號初始化清單並不意味著複製 -傳回物件的構造。它只是使用copy-list-initialization來初始化回傳值。
  • DR 1290修改了與initializer_list生命週期相關的措辭,DR 1565和1599也在考慮中,可能會帶來進一步的變化。
  • 將附加引用綁定到initializer_list 不會延長其底層數組的生命週期,類似於對臨時物件的引用不會延長臨時物件的生命週期。

以上是從 C 函數傳回的 Braced-Init-List 的生命週期是多少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!