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

时间:2013-11-16 09:26:59

标签: c++ visual-studio-2010 operator-overloading

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

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;
}

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

2 个答案:

答案 0 :(得分:2)

您不必这样做,只需要避免不必要地复制对象。

对于你的第二个问题,再次你不必这样做,但它使得+ =对于Vector而言类似于对int或double进行操作

答案 1 :(得分:1)

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