首頁  >  文章  >  後端開發  >  不完整型別是標準容器實例化的合法論點嗎?

不完整型別是標準容器實例化的合法論點嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-05 07:19:02524瀏覽

Are Incomplete Types Legitimate Arguments for Standard Container Instantiation?

不完整型式可以增強標準容器嗎?

在追求遞歸資料結構時,開發人員經常訴諸於使用不完整型別實例化標準容器。然而,由於標準對使用不完整模板參數的指導有限,這種構造的合法性一直存在爭議。

這種擔憂源於§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中文網其他相關文章!

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