不完整类型可以增强标准容器吗?
在追求递归数据结构时,开发人员经常诉诸于使用不完整类型实例化标准容器。然而,由于标准对使用不完整模板参数的指导有限,这种构造的合法性一直存在争议。
这种担忧源于 §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中文网其他相关文章!