容器要求已从C ++ 03更改为C ++ 11。尽管C ++ 03具有全面的要求(例如,副本的可构造性和向量的可分配性),但C ++ 11定义了每个容器操作的细粒度要求(第23.2节)。
结果,您可以例如将可复制构造但不可分配的类型(例如具有const成员的结构)存储在向量中,只要您仅执行某些不需要分配的操作(构造且push_back
为此类操作)即可;insert
不是)。
我想知道的是:这是否意味着该标准现在允许vector<const T>
?我看不出有任何理由不应该-const T
与具有const成员的结构一样,是一种可复制构造但不能分配的类型-但我可能错过了一些东西。
(让我觉得我可能错过了一些东西的部分原因是,如果您尝试实例化vector<const T>
,gcc主干会崩溃并烧毁,但是vector<T>
对于T具有const成员的地方也很好)。
address
默认分配器中的一对重载成员函数:当T为const时,这两个重载具有相同的签名。纠正此问题的简单方法是专门化std::allocator<const T>
并消除其中的一个重载。