gpt4 book ai didi

c++ - 为什么只有这些 C++ 标准库容器保证允许不完整的类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:18 25 4
gpt4 key购买 nike

众所周知,C++ 标准库容器通常不能用不完整的类型实例化。这样做的结果是 UB,尽管在实践中给定的实现要么接受代码而没有问题,要么发出编译错误。有关此限制的讨论可在此处找到:Why C++ containers don't allow incomplete types?

但是,在C++17中,有3个容器明确允许不完整的类型:std::forward_list (26.3.9.1/4), std::list (26.3.10.1/4),和 std::vector (26.3.11.1/4)。

这是 N4510 的结果.该文件指出,“基于 Issaquah session 的讨论”,至少在一开始就决定将此类支持限制在这三个容器中。但是为什么?

最佳答案

因为我们知道如何在不破坏 ABI 的情况下实现这些容器来处理不完整的类型。

std::array 另一方面,需要知道元素有多大(例如)。

关于c++ - 为什么只有这些 C++ 标准库容器保证允许不完整的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57911092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com