【发布时间】:2020-07-08 13:03:25
【问题描述】:
我在运算符重载定义中遇到错误。如果我删除参数中的 const,错误就会消失。有什么方法可以在不删除参数中的 const 的情况下使其工作?还有他们背后发生了什么?
class Vector3D{
public:
float x, y, z;
float dot(Vector3D& v) {
return x * v.x + y * v.y + z * v.z;
}
};
inline float operator *(const Vector3D& a, const Vector3D& b) {
return a.dot(b);
}
【问题讨论】:
-
只需要定义成员函数
dotconst -
问题是你的成员函数需要是const。最好将其设为非成员函数,因为它可以使用公共接口来计算点积。请参阅 Scott Meyers 的算法,了解何时将某事设为“How Non-Member Functions Improve Encapsulation”中的成员函数。
-
@cdhowie 其实应该是
float dot(const Vector3D &v) const { -
确实,错过了争论......
标签: c++ constants overloading operator-keyword