之前两篇文章里的两个函数如下所示:
[cpp]
//重载操作符+
Vector3 operator+(const Vector3 &a){
return Vector3(x + a.x,y + a.y,z+a.z);
}
//比较两个数,如果相同返回0,如果v1大,返回1,如果v2大,返回-1
int compare(const int &v1, const int &v2)
{
if(v1 < v2) return -1;
if(v2 < v1) return 1;
return 0;
}
因为之前是用C#和Java比较多,就是无法理解这两个函数的参数定义,为什么要加上const和&.其实有时候看到&,*,T等符号就会头大。如果在java中第二个函数我肯定就会这样写:
[java]
//比较两个数,如果相同返回0,如果v1大,返回1,如果v2大,返回-1
int compare( int v1, int v2)
{
if(v1 < v2) return -1;
if(v2 < v1) return 1;
return 0;
}
先不管上面的东西,再来看一个出现无数次的交换例子:
[cpp]
//把形参定义为引用类型
void swapOne(int& a, int& b)
{
int tmp = b;
b = a;
a = tmp;
}
//使用复制实参,只是改变局部副本,而传递函数的实参没有修改
void swapTwo(int a,int b)
{
int tmp = b;
b = a;
a = tmp;
}
int main(int argc, char* argv[])
{
int a = 1, b = 2;
printf("before swap,a:%d,b:%d\n",a,b);
swapOne(a,b);
printf("after swap,a:%d,b:%d\n",a,b);
printf("before swap,a:%d,b:%d\n",a,b);
swapTwo(a,b);
printf("after swap,a:%d,b:%d\n",a,b);
return 0;
}