1、值传递
记得在学习C语言时,遇到过这样的问题
void swap(int a,int b)
{
int t=b;
b=a;
a=t;
}
这个换值函数在主函数调用后总是不起作用,为什么呢?
因为函数进行参数传递时,会将你传的变量拷贝一份,如果把
int main()
{
int x=4;
int y=5;
swap(x,y);
return 0;
}
等价于
int main()
{
int x=4;
int y=5;
int x’=x;
int y’=y;
int t=x’;
x’=y’;
y’=t;
//其实还有x’,y’,t的销毁
return 0;
}
所以传值时对参数的操作与实参无关。(指针当我没说)
2、传址
其实指针也是对象的一种嘛,不过比较特殊。
如果将上述例子改为
void swap(int *pa,int *pb)
{
int t=*pb;
*pb=*pa;
*pa=t;
}
int main()
{
int a;
int b;
swap(&a,&b);
return 0;
}
那么a,b就能交换成功辣。
3、传引用
将
void swap(int *pa,int *pb)
{
int t=*pb;
*pb=*pa;
*pa=t;
}
改为
void swap(int &a,int &b)
{
int t=b;
b=a;
a=t;
}
这样
int main()
{
int x=4;
int y=5;
// int x’=x;
// int y’=y;
int t=x;
x=y;
y=t;
//只有t的销毁,但t也不用
return 0;
}
发现了吗,传引用变量的创建和销毁最少,在只有几个int 时优势很小,但传自定义类型时(后面会更构造、析构)如果对象特别大,能省去好多开销不是吗?所以在写函数时,如果没特殊需求,尽量使用引用传递。
C++之——参数传递
最新推荐文章于 2022-09-09 12:24:14 发布