眾所周知,C 容器禁止實例化不完整類型。 Boost 的容器庫規避了這項限制,引發了對其目的和潛在缺陷的質疑。
限制的理由
歷史上,C 標準化委員會發現不同的實現行為不完整跨不同 STL 實現的類型。為了確保相容性並避免混淆,他們明確禁止標準庫容器中的不完整類型。
允許不完整類型的潛在缺點
雖然允許不完整類型可能會啟用高級資料結構,它也可能會帶來運行時問題。不完整類型缺乏必要的信息,使得容器難以管理記憶體分配和物件生命週期。
未來的可能性
C 委員會已經承認允許不完整的潛在好處類型。 2002 年,庫工作小組主席暗示,在 C 的未來版本中可能會放寬這項限制。然而,截至目前的標準,該禁令仍然存在。
Boost 的解決方案
認識到標準方法的局限性,Boost 開發人員創建了自己的容器,能夠處理不完整的類型。這使得標準庫無法建立遞歸資料結構。
C 17 部分允許
C 17 部分放寬了此限制容器,允許對容器的元素類型或鍵類型中預先聲明的類型使用不完整類型。這種有限的允許提高了與一些現代程式模式的兼容性,同時保持了現有實現的穩定性。
以上是為什麼 C 標準容器不能使用不完整型,解決方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!