标准容器模板和不完整类型
问题是标准容器模板是否可以用不完整类型实例化。虽然某些容器结构在实践中似乎可行,但 C 11 标准在 §17.6.4.8 [lib.res.on.functions] 下明确禁止这种情况。
该标准指出,“……如果不完整的类型(3.9) 在实例化模板组件时用作模板参数,除非该组件特别允许。”此限制适用于成员函数、成员类定义和签名,但不适用于块作用域内的操作。
标准库实现无法引发因不完整类型而失败的模板实例化,即使其他特别需要的实例化成功。此禁令旨在防止潜在问题,例如由“小向量”等优化引起的自引用类型。
存在异常,例如 std::unique_ptr 类模板,它明确支持不完整的类型参数,即使在块范围内。然而,对于标准容器,使用不完整类型的限制仍然存在,确保跨实现的行为一致。
以上是标准容器模板可以用不完整的类型实例化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!