我知道尽可能多地使用非成员非友元类的接口是个好主意,而且我刚刚意识到,对于我的 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;
}
你所拥有的对我来说看起来不错。
顺便说一句,当您谈到运算符+时,通常用+=来实现它。 (创建lhs的副本,然后调用lhs += rhs并返回结果)
不知道您是否已经意识到这个技巧,但由于您关心实现这些运算符的规范方法,所以提及它也没什么坏处。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)