不完整型式可以增強標準容器嗎?
在追求遞歸資料結構時,開發人員經常訴諸於使用不完整型別實例化標準容器。然而,由於標準對使用不完整模板參數的指導有限,這種構造的合法性一直存在爭議。
這種擔憂源於§17.6.4.8 [lib.res.on.functions] 中的一段話,其中標準禁止在實例化模板組件時將不完整類型作為模板參數,除非該組件明確允許。這引發了有關以下構造的有效性的問題:
<code class="cpp">struct multi_tree_node { std::vector< multi_tree_node & > child; };</code>
雖然此類構造在實踐中通常無縫運行,但標準對不完整類型實例化的沉默使人對其合法性產生了懷疑。
但是,進一步的審查表明,該標準對不完整類型的限制主要適用於“類型操作...”,在 §17.6.4.8 的上下文中,它指的是函數。由於實例化容器不涉及執行其成員定義中的任何函數,因此實例化本身可能不會違反標準的禁令。
std::unique_ptr 的存在支持這種解釋,它明確允許不完整的類型參數即使在區塊範圍內。此外,該標準禁止不完整類型實例化的基本原理,因為它涉及「小向量」等最佳化技術的有效實現,但不適用於容器實例化。
因此,雖然該標準不鼓勵使用不完整類型,因為實例化模板組件時的參數,實例化具有不完整類型的標準容器的合法性仍然不明確。然而,在標準提供進一步澄清之前,建議對此類結構保持謹慎。
以上是不完整型別是標準容器實例化的合法論點嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!