我知道尽可能多地利用类非成员非朋友的接口是个好主意,而且我刚刚意识到对于我的 3D 矢量类“Vector3”,我可以移动 +=, -= 等运算符在类之外,只留下构造函数和复制赋值运算符。
问题是:这个操作符应该是什么样的?我见过许多其他运算符的规范形式并遵循了他们的建议,但我还没有看到这些运算符的规范形式。我已经给出了我认为应该在下面的内容。
第二个问题是:这些运算符到底叫什么?算术赋值运算符?
之前的(相关)代码:
class Vector3 {
public:
Vector3& operator+=(const Vector3& rhs);
float x, y, z;
};
Vector3& Vector3::operator+=(const Vector3 &rhs) {
x += rhs.x;
y += rhs.y;
z += rhs.z;
return *this;
}
到目前为止,我已将其更改为:
class Vector3 {
public:
float x, y, z;
};
Vector3& operator+=(Vector3& lhs, const Vector3& rhs) {
lhs.x += rhs.x;
lhs.y += rhs.y;
lhs.z += rhs.z;
return lhs;
}