隐式赋值运算符[C++]

use*_*093 0 c++ operator-overloading assignment-operator

如果我的类上有一个运算符重载,那么是否也隐式创建了运算符的赋值版本?

class square{
   square operator+(const square& B);
   void operator=(const square& B);
};
Run Code Online (Sandbox Code Playgroud)

在那里,我可以打电话

square A, B;
A += B;
Run Code Online (Sandbox Code Playgroud)

编译器隐式决定调用'operator +'然后'operator ='?

eml*_*lai 5

不,+=必须明确定义.


作为旁注,operator+ 通常应该创建一个新对象:

square operator+(const square& B);
Run Code Online (Sandbox Code Playgroud)

并且operator= 应该返回一个引用*this:

square& operator=(const square& B);
Run Code Online (Sandbox Code Playgroud)

另外值得一提的是,operator+通常在以下方面实现的operator+=,即operator+呼吁operator+=在新的副本.