为什么std :: vector :: push_back需要赋值运算符

时间:2014-09-03 08:24:43

标签: c++ vector stl c++03

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。我找不到标准中定义的位置,所以如果你能指出参考,我将非常感激

1 个答案:

答案 0 :(得分:12)

reference you quote适用于C ++ 11。但是,C ++ 03标准对可以存储在容器中的类型有更严格的要求:

  

23.1容器要求[lib.container.requirements]

     

...

     

存储在这些组件中的对象类型必须符合   CopyConstructible类型的要求(20.1.3),以及附加的    可分配 类型的要求。

(强调我的。)这些要求在C ++ 11中已经大大放松,通常用对容器执行的特定操作来表达。在该标准中,您的代码是有效的,因为唯一的要求是ACopyInsertable