首页 >后端开发 >C++ >为什么 C 标准容器不能使用不完整类型,解决方法是什么?

为什么 C 标准容器不能使用不完整类型,解决方法是什么?

Susan Sarandon
Susan Sarandon原创
2024-12-05 16:11:14215浏览

Why Can't C   Standard Containers Use Incomplete Types, and What Are the Workarounds?

了解 C 容器中不完整类型的限制

众所周知,C 容器禁止实例化不完整类型。 Boost 的容器库规避了这一限制,引发了对其目的和潜在缺陷的质疑。

限制的理由

历史上,C 标准化委员会发现不同的实现行为不完整跨不同 STL 实现的类型。为了确保兼容性并避免混淆,他们明确禁止标准库容器中的不完整类型。

允许不完整类型的潜在缺点

虽然允许不完整类型可能会启用高级数据结构,它也可能会带来运行时问题。不完整类型缺乏必要的信息,使得容器难以管理内存分配和对象生命周期。

未来的可能性

C 委员会已经承认允许不完整的潜在好处类型。 2002 年,库工作组主席暗示,在 C 的未来版本中可能会放宽这一限制。然而,截至目前的标准,该禁令仍然存在。

Boost 的解决方案

认识到标准方法的局限性,Boost 开发人员创建了自己的容器,能够处理不完整的类型。这使得标准库无法创建递归数据结构。

C 17 部分允许

C 17 部分放宽了此限制容器,允许对容器的元素类型或键类型中预先声明的类型使用不完整类型。这种有限的允许提高了与一些现代编程模式的兼容性,同时保持了现有实现的稳定性。

以上是为什么 C 标准容器不能使用不完整类型,解决方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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