0

可能重复:
隐式复制构造函数/赋值运算符
C++ 的行为 - 自动生成默认 ctor、复制 ctor 和默认赋值运算符的条件?

C++编译器总是提供重载的赋值运算符是真的吗?c++编译器不提供的情况有哪些?

4

2 回答 2

2

任何 C++ 编译器都会隐式提供赋值/复制赋值(=)运算符,除非您const在类中拥有或引用成员。

如果const成员编译器无法提供=,因为这会破坏const初始化后不修改成员的约定。

如果引用成员编译器不提供=,因为它将它留给类的用户来决定适当的行为。

于 2012-06-07T17:59:27.510 回答
1

C++编译器总是提供重载的赋值运算符是真的吗?

如果您不声明自己的赋值运算符,编译器将隐含地为您声明一个(总是)。如果你使用它,那么编译器也会隐式定义它(总是)。

Als 的回答中显示了一个常见的误解,即在某些情况下不会对其进行定义。那是错误的,类型是否具有常量成员或引用根本不重要,编译器会声明定义它。这些情况的情况是隐式定义的编译器将无法编译。

如果您在编译器中尝试这样做,错误将不会指向缺少的赋值运算符,而是在编译隐式定义的赋值时出错。

于 2012-06-07T18:29:55.880 回答