众所周知,C ++标准库容器通常不能使用不完整的类型实例化。这样做的结果是UB,尽管在实践中给定的实现将接受没有问题的代码或发出编译错误。关于此限制的讨论可以在这里找到:为什么C ++容器不允许不完整的类型?
但是,在C ++ 17中,存在三个明确允许不完整类型的容器:std::forward_list(26.3.9.1/4)、std::list(26.3.10.1/4)和std::vector(26.3.11.1/4)。
这是N4510的结果。该文件指出,“根据伊萨夸会议的讨论”,决定至少在最初将这种支持仅限于这三个容器。但为什么?
因为我们知道如何实现这些容器来处理不完整的类型,而不破坏 ABI。
std::array另一方面,需要知道一个元素有多大(例如)。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |