gpt4 book ai didi

c++ - C++11 是否允许 vector

转载 作者:太空狗 更新时间:2023-10-29 23:10:47 24 4
gpt4 key购买 nike

容器要求已从 C++03 更改为 C++11。虽然 C++03 有全面的要求(例如 vector 的复制构造性和可赋值性),但 C++11 定义了每个容器操作的细粒度要求(第 23.2 节)。

因此,您可以例如将可复制构造但不可赋值的类型(例如具有 const 成员的结构)存储在 vector 中,只要您只执行某些不需要赋值的操作(构造和 push_back 就是这样的操作;insert不是)。

我想知道的是:这是否意味着标准现在允许 vector<const T> ?我看不出有什么理由不应该 - const T ,就像具有 const 成员的结构一样,是一种可复制构造但不可分配的类型 - 但我可能错过了一些东西。

(部分让我觉得我可能遗漏了一些东西的原因是,如果您尝试实例化 vector<const T> ,gcc 主干会崩溃并烧毁,但是 vector<T> 没问题,其中 T 有一个 const 成员)。

最佳答案

不,我相信分配器要求说 T 可以是“非常量、非引用对象类型”。

您无法对常量对象的 vector 做很多事情。还有一个 const vector<T>无论如何都会几乎相同。


许多年后,这个快速而简单的答案似乎仍然吸引着评论和投票。不总是起来。 :-)

所以要添加一些适当的引用:

对于我在纸上的 C++03 标准,[lib.allocator.requirements] 部分中的表 31 说:

T, U any type

并非任何类型都有效。

因此,下一个标准 C++11 说 in a close draft在 [allocator.requirements] 和现在的表 27 中:

T, U, C any non-const, non-reference object type

这与我最初凭内存写的内容非常接近。这也是问题所在。

但是,在 C++14 ( draft N4296 ) 表 27 中现在说:

T, U, C any non-const object type

可能是因为引用毕竟不是对象类型?

现在在 C++17 ( draft N4659 ) 中,表 30 说:

T, U, C any cv-unqualified object type (6.9)

所以不仅是const排除了,还volatile .无论如何可能是旧消息,只是一个澄清。


另请参阅 Howard Hinnant's first-hand info ,目前就在下方。

关于c++ - C++11 是否允许 vector<const T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54859984/

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