首页 >后端开发 >C++ >不完整类型是标准容器实例化的合法论据吗?

不完整类型是标准容器实例化的合法论据吗?

Barbara Streisand
Barbara Streisand原创
2024-11-05 07:19:02579浏览

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