在此代码中,为什么要放&在const CVector& param ???
我们可以按照以下方式使用
c = a + b;
c = a.operator+ (b);
在第二个声明中,b
不是CVector&
类型,所以这就是我感到困惑的原因。
// overloading operators example
#include <iostream>
using namespace std;
class CVector {
public:
int x,y;
CVector () {};
CVector (int a,int b) : x(a), y(b) {}
CVector operator + (const CVector&);
};
CVector CVector::operator+ (const CVector& param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
int main () {
CVector foo (3,1);
CVector bar (1,2);
CVector result;
result = foo + bar;
cout << result.x << ',' << result.y << '\n';
return 0;
}
答案 0 :(得分:2)
由于您不希望操作修改操作数,因此您有两种解决方案:
const
关键字阻止您修改对象,而引用允许您在没有副本的情况下传递对象。答案 1 :(得分:1)
因为你没有在第二个向量上运行(修改它的属性),你只是从中读取它。通过使用&amp;签名你确保它通过引用传递,如果第二个向量是一个大数据结构,如1000 * 1000矩阵,它将有效地工作。
答案 2 :(得分:0)
使用引用来避免复制object和const以指示不会修改对象。