C 11 移動構造函數未調用,首選默認構造函數
問題:
在C 中11、當透過另一個物件實例化一個物件時,為什麼應該呼叫的移動建構函數卻沒有被呼叫?
答案:
實例化時,編譯器可能偶爾會呼叫應用一種稱為複製省略的技術。複製省略允許直接將臨時物件建構到要複製或移動到的目標中,繞過複製或移動建構函式/析構函式對。
標準允許在以下情況下進行複製省略:
在給定的範例中,當用 X("test") 實例化 z 時,會發生複製省略,因為它被視為尚未綁定的臨時物件一個參考。因此,它被直接構造到 z 中,繞過移動構造函數並使用預設構造函數構造 z。
明確呼叫 move(X("test")) 可防止複製省略並強制使用移動建構函數,如修改後的輸出所示。
以上是為什麼在用另一個物件實例化一個物件時不呼叫 C 11 移動建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!