最佳答案
容器需求已经从 C + + 03改为 C + + 11。虽然 C + + 03有一揽子要求(例如,向量的可复制构造性和可分配性) ,但 C + + 11定义了每个集装箱操作的细粒度要求(第23.2节)。
因此,你可以在一个向量中存储一个可复制构造但不可赋值的类型,比如一个带有 const 成员的结构,只要你只执行某些不需要赋值的操作(构造和 push_back
就是这样的操作,而 insert
不是)。
我想知道的是: 这是否意味着标准现在允许 vector<const T>
?我看不出有什么理由不这样做—— const T
,就像一个包含 const 成员的结构,是一种可复制构造但不可赋值的类型——但我可能遗漏了什么。
(让我觉得我可能遗漏了一些东西的部分原因是,如果您尝试实例化 vector<const T>
,gcc 主干会崩溃并烧毁,但是对于 T 有一个 const 成员的 vector<T>
来说,这没有问题)。