【发布时间】:2014-09-03 08:24:43
【问题描述】:
std::vector::push_back(constT& value)
根据this 要求类型 T 是 CopyInsertable 。
但是,除非我提供公共赋值运算符,否则编译以下程序会失败(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);
}
为什么要提供这个赋值运算符,我的印象是复制构造就足够了。
附:我在标准中找不到定义这个的地方,所以如果你能指出参考,我将不胜感激
【问题讨论】:
-
@Griwes 你的类型有一个可访问的赋值运算符。不确定你展示的是什么。
-
除非我提供公共赋值运算符
-
@Griwes 这是阅读它的一种方式。另一个是该代码无法编译(这就是 OP 实际所说的),如果它们提供了一个 accessibe 赋值运算符,它就会编译。
-
请创建一个有错误的Minimal, Complete, and Verifiable example,然后在您的问题中显示。另外,请编辑您的问题以包含完整且未经编辑的错误日志。
-
@PiotrS。不,它没有。 ideone.com/0t6HFs。各位,请理解 OP 是在 pre-C++11 模式下编译的。