問題:
根據C 標準,當一個函數傳回一個標準,當一個函數傳回一個標準初始化列表,其底層數組的生命週期是否應該延伸到呼叫函數?
C 標準規定 std::initializer_list 物件的生命週期與其初始化的物件相同。當函數傳回初始化列表時,它會初始化返回值物件。然而,涉及到初始化列表的兩個實例:函數中的一個和呼叫程式碼中的一個。
標準中的範例表明數組的生命週期延伸到複製到的對象,這意味著返回值的數組也應該在呼叫函數中保留。然而,實際情況並非如此。
答案:
目前,std::initializer_list 傳回值的生命週期行為在C 標準。不同的編譯器以不同的方式實現它:
總之,目前不可能依賴 std:: 的生命週期initializer_list 回傳值擴展到呼叫函數中。避免使用 std::initializer_list 傳遞值,因為它可能會導致意外行為。
附加說明:
DR 1290 修改了標準的措辭,並且DR 1565 和 1599 仍處於開放狀態,解決了相關問題。然而,語義仍在定義中,編譯器需要時間來實現最終的變更。
以上是`std::initializer_list` 傳回值的生命週期是否延伸到呼叫函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!