首頁  >  文章  >  後端開發  >  不完整型別可以在標準容器中實例化嗎?

不完整型別可以在標準容器中實例化嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-05 22:56:02729瀏覽

Can Incomplete Types Be Instantiated in Standard Containers?

標準容器中的不完整類型實例化

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn