可能重复:
behaviour of the implicit copy constructor / assignment operator
C++ - conditions for automatic generation of default ctor, copy ctor,and default assignment operator?
重载的赋值运算符总是由C ++编译器提供吗? c ++编译器没有提供它的情况是什么?
答案 0 :(得分:2)
任何C ++编译器都会隐式提供赋值/复制赋值(=
)运算符,除非您的类中有const
或引用成员。
如果const
成员编译器无法提供=
,因为这会破坏初始化后不修改const
成员的合同。
如果引用成员编译器不提供=
,因为它将它留给类的用户来决定适当的行为。
答案 1 :(得分:1)
重载的赋值运算符总是由C ++编译器提供。
如果您没有声明自己的赋值运算符,编译器将隐式声明一个(总是)。如果你使用它,那么编译器也将隐式定义它(总是)。
在Als的回答中有一个常见的误解,即在某些情况下不会定义。那是错误,无论类型是否具有常量成员或引用都无关紧要,编译器将声明并定义它。这些情况的情况是隐式定义的编译器将无法编译。
如果在编译器中尝试,则错误不会指向缺少的赋值运算符,而是指向编译隐式定义的赋值时的错误。