直接初始化呼叫的複製構造函數
在提供的程式碼片段中,您可能會期望在分配A(5 時呼叫複製構造函數) 到a.但是,程式碼從不呼叫複製建構子。此行為不是編譯器最佳化的結果,而是 C 的已記錄功能。
使用直接初始化 (A a = A(5);) 初始化物件時,編譯器會執行複製省略。此最佳化消除了不必要的臨時物件構造,然後將該物件複製到初始化變數。相反,已初始化的變數是使用建構函式的參數直接初始化的。
此行為記錄在C 標準(第12.8.15,第211 頁)中,其中指出直接初始化相當於構造使用構造函數的參數就地對象:
在在這種情況下,a 直接使用A 建構函式的參數初始化,繞過複製建構子。要強制編譯器呼叫複製建構函數,您需要先預設構造 a:
這確保在為 a 分配 A(5) 的值時調用複製構造函數。
以上是為什麼在 C 中直接初始化期間不呼叫複製構造函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!