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

ToB*_*oBe 9 c++ stl vector c++03

std::vector::push_back(constT& value)
Run Code Online (Sandbox Code Playgroud)

根据要求类型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);
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要提供这个赋值运算符,我的印象是复制结构就足够了.

PS我无法在标准中找到这个定义的位置,所以如果你能指出参考,我将非常感激

jua*_*nza 12

你引用的参考适用于C++ 11.但是,C++ 03标准对可以存储在容器中的类型有更严格的要求:

23.1集装箱要求[lib.container.requirements]

...

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

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