运算符重载 C++ - 为什么我们需要将参数作为 const 和 (...)传递?

Operator overloading in C++ - why do we need to pass parameter as const & (...)?

本文关键字:const 传递 参数 C++ 重载 为什么 我们 运算符      更新时间:2023-10-16

假设我想重载一个运算符==。我有一个类向量和以下方法:

bool operator ==( const Vector & v )
{
    if(( this->x == v.x ) &&( this->y == v.y ) )
         return true;
    else
         return false;
}

为什么我需要将一个对象(在本例中为 v)作为常量地址传递给该对象?我知道 - const 强制程序员不要修改传递的对象,但为什么 &?

我的第二个问题涉及运算符重载,如 +=、*= 等。请看这个代码:

Vector operator +( const Vector & v )
{
    return Vector( this->x + v.x, this->y + v.y );
}
// vs
Vector & operator +=( const Vector & v )
{
    this->x += v.x;
    this->y += v.y;
    return * this;
}

在第二种情况下,我们也可以返回一个新对象。为什么我们返回相同的递增对象?

您不必

这样做,只是希望避免不必要地复制对象。

对于您的第二个问题,您不必这样做,但它使 += 对 Vector 的操作与对 int 或 double 的操作类似

对于第二个问题:如果你写a+=5;a*=10;你通常期望原始变量 a 将被添加或相乘......如果您返回原始对象或新对象取决于您,但如果您使用它与原始含义相反,您可能会混淆其他同事......