运算符重载 C++ - 为什么我们需要将参数作为 const 和 (...)传递?
Operator overloading in C++ - why do we need to pass parameter as const & (...)?
假设我想重载一个运算符==。我有一个类向量和以下方法:
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 将被添加或相乘......如果您返回原始对象或新对象取决于您,但如果您使用它与原始含义相反,您可能会混淆其他同事......
相关文章:
- 将参数传递为"const"的奇怪效果
- 在 C++ 中通过引用传递类成员时,Const 不起作用
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- C++将派生类的const值传递给基意外行为的构造函数
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 如何在单个模板调用中传递const_iterator和非const迭代器
- C++通过 const 引用传递时不调用派生类函数
- 将文字作为const-ref参数传递
- 修改数据是否由 const shared_ptr&Ok 传递?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 将 const 传递为这样时出错
- 将 const 传递给接受 const 指针的函数是不正确的
- 将对象形参作为const传递并读取它
- 错误:将(const A)传递为(this)
- 作为const传递给函数的对象返回指向其数据的指针,编译器会报错
- 将类对象数组作为const传递给函数,以防止对类对象进行任何修改
- 引用、指针和形参的const传递
- 安全地返回 const 和 const 传递的对象 &?