標準容器中的不完整類型實例化
在C 中,像std::vector 和std::map 這樣的容器允許實例化容器不完整的型別。這種做法通常用於透過自引用類型建立遞歸結構。然而,C 標準提出了是否允許此類實例化的問題。
根據 C 11 標準的 §17.6.4.8,如果未明確允許,不完整的類型實例化可能會導致未定義的行為。某些容器(例如 std::vector)可以適當地處理不完整類型,因為它們不具有透過值與 value_type 物件互動的 value_type 成員或函數。然而,std::map 在這方面表現出有問題的行為。
該標準的目的是禁止不完整的類型實例化,即使特定的實作可能不會遇到問題。這主要是由於潛在的實作困難,例如針對固定數量的元素最佳化 std::vector,如果允許遞歸結構,則可能會中斷。
因此,此標準強制要求對容器使用完整型別實例化。然而,它承認創建明確支援不完整類型的自訂類別模板的可能性,如 std::unique_ptr 所示。
因此,標準容器不應該用不完整類型實例化,儘管允許設計適應這種用法的自訂類別模板。
以上是不完整型別可以在標準容器中實例化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!