標準容器範本和不完整型別
問題是標準容器範本是否可以用不完整型別實例化。雖然某些容器結構在實務上似乎可行,但 C 11 標準在 §17.6.4.8 [lib.res.on.functions] 下明確禁止這種情況。
該標準指出,「…如果不完整的類型(3.9) 在實例化模板組件時用作模板參數,除非該組件特別允許。」此限制適用於成員函數、成員類定義和簽名,但不適用於區塊作用域內的操作。
標準函式庫實作無法引發因不完整型別而失敗的範本實例化,即使其他特別需要的實例化成功。此禁令旨在防止潛在問題,例如由「小向量」等最佳化引起的自引用類型。
存在異常,例如 std::unique_ptr 類別模板,它明確支援不完整的類型參數,即使在區塊範圍內。然而,對於標準容器,使用不完整類型的限制仍然存在,確保跨實現的行為一致。
以上是標準容器模板可以用不完整的型別實例化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!