C++11 是否允许向量

2024-02-23

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

因此,您可以例如:只要您只执行某些不需要赋值的操作(构造和push_back是这样的操作;insert不是)。

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

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


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

你无法用常量对象的向量做太多事情。还有一个const vector<T>无论如何,几乎是一样的。


许多年后,这个快速而肮脏的答案似乎仍然吸引着评论和投票。并不总是向上。 :-)

因此要添加一些适当的参考:

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

T, U any type

不是那个any类型确实有效。

所以,下一个标准 C++11 说在接近的草稿中 https://wg21.link/n3242在 [allocator.requirements] 和现在的表 27 中:

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

这与我最初凭记忆写的内容非常接近。这也是题主问的问题。

然而,在 C++14 中(草案 N4296 https://wg21.link/N4296) 表 27 现在显示:

T, U, C any non-const object type

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

现在在 C++17 中(草案 N4659 https://wg21.link/N4659)表 30 表示:

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

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


另请参阅霍华德·欣南特的第一手资料 https://stackoverflow.com/a/39652132/597607,目前就在下面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 是否允许向量? 的相关文章

随机推荐