首页  >  文章  >  后端开发  >  不完整类型可以在标准容器中实例化吗?

不完整类型可以在标准容器中实例化吗?

Susan Sarandon
Susan Sarandon原创
2024-11-05 22:56:02734浏览

Can Incomplete Types Be Instantiated in Standard Containers?

标准容器中的不完整类型实例化

在 C 中,像 std::vector 和 std::map 这样的容器允许实例化容器不完整的类型。这种做法通常用于通过自引用类型创建递归结构。然而,C 标准提出了是否允许此类实例化的问题。

根据 C 11 标准的 §17.6.4.8,如果未明确允许,不完整的类型实例化可能会导致未定义的行为。某些容器(例如 std::vector)可以适当地处理不完整类型,因为它们不具有通过值与 value_type 对象交互的 value_type 成员或函数。然而,std::map 在这方面表现出有问题的行为。

该标准的目的是禁止不完整的类型实例化,即使特定的实现可能不会遇到问题。这主要是由于潜在的实现困难,例如针对固定数量的元素优化 std::vector,如果允许递归结构,则可能会中断。

因此,该标准强制要求对容器使用完整类型实例化。然而,它承认创建显式支持不完整类型的自定义类模板的可能性,如 std::unique_ptr 所示。

因此,标准容器不应该用不完整类型实例化,尽管允许设计适应这种用法的自定义类模板。

以上是不完整类型可以在标准容器中实例化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn