何时应该通过常量引用传递运算符重载函数的参数?

时间:2015-01-05 16:16:16

标签: c++ operator-overloading pass-by-reference

lhs和rhs通过常量引用传递(const Type&)。

CVector operator+ (const CVector& lhs, const CVector& rhs) {
    CVector temp;
    temp.x = lhs.x + rhs.x;
    temp.y = lhs.y + rhs.y;
    return temp;
}

4 个答案:

答案 0 :(得分:1)

  1. 当它是要复制的轻量级(便宜)数据时(例如,对于int,float,char等,通过值传递就好了)

  2. 在函数/运算符实现中观察参数(即它是输入只读参数)

  3. 作为两个点的总和,我们将得到为什么我们应该通过不断的参考。

    为了清楚了解,请参阅http://www.cs.fsu.edu/~myers/c++/notes/references.html

答案 1 :(得分:1)

更喜欢按照这些指南选择参数。对于仅输入参数:

  • 始终对所有指针或对仅输入参数的引用进行const限定。

  • 首选输入原始类型(例如char,float)和值便宜的值对象(例如,Point,complex)按值计算。

  • 首选参考const。

  • 获取其他用户定义类型的输入
  • 如果函数需要其参数的副本,请考虑按值传递而不是引用。这在概念上与引用const和执行副本相同,它可以帮助编译器更好地优化临时性。

对于输出或输入/输出参数:

  • 如果参数是可选的,则首选(智能)指针传递(因此调用者可以传递null作为"不可用"或者"不关心"值)或者如果函数存储指针的副本或以其他方式操纵参数的所有权。

  • 如果参数是必需的,并且函数不会存储指向它的指针或以其他方式影响其所有权,则首选通过引用传递。这表明该参数是必需的,并使调用者负责提供有效的对象。

参考:[C ++编码标准:101规则,指南和最佳实践]#25。通过值,(智能)指针或参考

适当地获取参数

答案 2 :(得分:0)

简而言之,要确保数据的不变性。

摘录自以下链接:

  

当通过引用传递参数时,将为实际参数创建引用(这需要最少的时间)并且不会复制值。这使我们能够以最小的性能损失传递大型结构和类。

  引用允许函数更改参数的值,这在许多情况下是不合需要的。如果我们知道函数不应该改变参数的值,但又不想通过值传递,那么最好的解决方案是通过const引用。

  const引用是一个不允许更改被引用变量的引用。因此,如果我们使用const引用作为参数,我们向调用者保证函数不会(也不能)更改参数!

参考:http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

答案 3 :(得分:0)

why arguments are passed as constant =>当想要阻止在被调用函数中改变各个数据成员时。

why constant references =>防止创建临时对象