為什麼允許在沒有std::move 的情況下返回std::unique_ptr
雖然std::unique_ptr 禁止複製構造,但是return 語句有unique_ptr 除外。此行為符合 C 語言規範,特別是第 12.8 §34 和 §35 條。
當滿足特定條件時,實作可能會省略類別物件的複製/移動構造。這種最佳化稱為複製省略,允許在函數內類別傳回類型的返回語句中使用。此異常適用於涉及類型與函數傳回類型相符的非揮發性自動物件的表達式。
此外,當左值物件發生複製省略時,複製建構子的重載解析將繼續進行,就像指定了該物件一樣由右值。
編譯器實作
此異常在編譯器內處理。編譯器利用語言規格來識別和應用省略技術,透過消除不必要的操作來最佳化程式碼。
命名值回傳
值得注意的是,以值回傳是最佳選擇這樣的場景。即使沒有省略,return 語句中的命名值也會被當作右邊值處理,產生最小的開銷。
以上是為什麼我可以在沒有 `std::move` 的情況下回傳 `std::unique_ptr` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!