我已经为2D vector (和标量)重载了operator-(和-=):

Vector2D Vector2D::operator-(const Vector2D& rhs) {
    return Vector2D(this->GetX() - rhs.GetX(), this->GetY() - rhs.GetY());
}

为了使此调用不抱怨no operator '-' matches these arguments,我必须这样做:
a2de::Vector2D Vector2D::GetFacingVector(const Vector2D& target, const Vector2D& source) {
    a2de::Vector2D facingVec(const_cast<Vector2D&>(target) - const_cast<Vector2D&>(source));
    return facingVec;
}

或这个:
a2de::Vector2D Vector2D::GetFacingVector(const Vector2D& target, const Vector2D& source) {
    a2de::Vector2D facingVec(Vector2D(target) - Vector2D(source));
    return facingVec;
}

两者似乎都是一件非常糟糕的事情。 (不要使用短语“仅当知道您在做什么时才使用const_cast,因为编译器会假设您在做!”)

这些是正确的还是有更好的方法完成同一件事?

最佳答案

您的运算符(operator)应为:

Vector2D Vector2D::operator-(const Vector2D& rhs) const

注意 const

关于c++ - C++使用两个const参数调用非const运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11894582/

10-11 02:32