在运算符重载中使用 "const" 作为参数

use "const" as parameter in operator overloading

我试图了解运算符重载,在我使用的教程中有一个重载“+”运算符以添加两个对象的示例。

  Box operator+(const Box& b)
  {
     Box box;
     box.length = this->length + b.length;
     box.breadth = this->breadth + b.breadth;
     box.height = this->height + b.height;
     return box;
  }

为什么参数需要是对对象的常量引用?

参数是 const 因为您不需要修改作为参数传递的 Box
该方法本身也应标记为 const,因为它也不会修改 *this

以 Quentin 的回答为基础,传递 "read-only" 参数的最有效方法是通过引用或指针传递(这基本上是同一件事)。

然而,这可能会带来一个问题,因为如果参数在函数内被修改(它不应该,因为你应该将它用作 "read-only",但如果它是的话),那么传递给函数的原始变量也被修改。为了防止这种情况,参数被标记为 const.

如果 "read-only" 参数 不是 通过引用或指针传递,这几乎没有什么关系,但正如我之前所说,它更有效率这样做。

总结:传递"read-only"参数的最佳方法是通过const引用(&)。

希望对您有所帮助。