不,我相信分配器要求说 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,目前就在下面。