在运算符重载中使用 "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
引用(&
)。
希望对您有所帮助。
我试图了解运算符重载,在我使用的教程中有一个重载“+”运算符以添加两个对象的示例。
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
引用(&
)。
希望对您有所帮助。