首頁 > 後端開發 > C++ > 為什麼在 C 中直接初始化期間不呼叫複製構造函數?

為什麼在 C 中直接初始化期間不呼叫複製構造函數?

Patricia Arquette
發布: 2024-12-16 17:01:09
原創
689 人瀏覽過

Why Isn't the Copy Constructor Called During Direct Initialization in C  ?

直接初始化呼叫的複製構造函數

在提供的程式碼片段中,您可能會期望在分配A(5 時呼叫複製構造函數) 到a.但是,程式碼從不呼叫複製建構子。此行為不是編譯器最佳化的結果,而是 C 的已記錄功能。

使用直接初始化 (A a = A(5);) 初始化物件時,編譯器會執行複製省略。此最佳化消除了不必要的臨時物件構造,然後將該物件複製到初始化變數。相反,已初始化的變數是使用建構函式的參數直接初始化的。

此行為記錄在C 標準(第12.8.15,第211 頁)中,其中指出直接初始化相當於構造使用構造函數的參數就地對象:

在在這種情況下,a 直接使用A 建構函式的參數初始化,繞過複製建構子。要強制編譯器呼叫複製建構函數,您需要先預設構造 a:

這確保在為 a 分配 A(5) 的值時調用複製構造函數。

以上是為什麼在 C 中直接初始化期間不呼叫複製構造函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板