為什麼 C 禁止使用不完整類型的模板?
C 容器,例如標準 C 庫中的容器,不允許不完整類型作為範本參數。這個限制是由於歷史原因造成的。
歷史依據
最初,人們認為容器可以支援不完整的類型。然而,測試揭示了 STL 實現之間的不一致。因此,標準化委員會宣布 STL 容器處理不完整類型的行為是未定義的,並將此禁令擴展到整個標準庫。
此決定旨在透過強制現有庫實現支援不完整類型來防止它們失效。
了解禁令
委員會的關注源於潛在的未定義行為和保持向後相容性的需要。模板中的不完整類型會帶來記憶體管理和程式碼穩定性方面的不確定性。
未來的考慮因素
儘管目前存在禁令,C 庫工作小組主席 Matt Austern 預測未來的 C 版本可能會放寬對不完整類型的限制。這可能反映出逐漸轉向增加對不完整類型的支持,如某些容器的 C 17 標準所述。
替代方法
由於持續的標準禁止,Boost 庫設計者選擇建立自己的允許不完整類型的容器。這種方法避免了標準庫施加的限制,並允許更靈活的資料結構。
以上是為什麼 C 模板不能使用不完整型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!