std::vector::push_back(constT& value)
根据this要求类型T为CopyInsertable。
但是,使用failes(clang,GCC,Visual;以及没有c ++ 11 )编译以下程序,除非我提供公共赋值运算符。
#include <vector>
class A {
A& operator= (const A& rhs); //private !!
};
int main() {
std::vector<A> v;
A a;
v.push_back(a);
}
为什么我需要提供这个赋值运算符,我的印象是复制结构足够了。
P.S。我找不到标准中定义的位置,所以如果你能指出参考,我将非常感激
答案 0 :(得分:12)
reference you quote适用于C ++ 11。但是,C ++ 03标准对可以存储在容器中的类型有更严格的要求:
23.1容器要求[lib.container.requirements]
...
存储在这些组件中的对象类型必须符合 CopyConstructible类型的要求(20.1.3),以及附加的 可分配 类型的要求。
(强调我的。)这些要求在C ++ 11中已经大大放松,通常用对容器执行的特定操作来表达。在该标准中,您的代码是有效的,因为唯一的要求是A
为CopyInsertable
。