您的位置:首页 > 编程语言 > C语言/C++

C++ 学习之函数传参1:引用传参和非引用传参

2011-04-02 13:15 429 查看
个人认为C++函数传参的一个指导性原则是:若函数的形参是非引用类型,传参时实际上是使用复制实参的值给形参,是实参值的副本,而非真正的实参;若函数的形参是引用类型的,则传递的其实就是实参本身,形参只不过是实参本身的别名而已。

1.非引用类型的形参(牢记关键词——复制实参的副本)

永远不要忘记传递进来的是实参的副本,与实参本身并无“太多直接”关系。

在使用非引用类型形参的时候,如果不需要对实参本身做修改,则直接传递即可。此时const形参,非const形参的值初始化问题五特殊要求,它们只是想用实参的副本值来初始化自己,并无特殊要求。

如果需要对实参本身进行操作或者修改,应该使用指针进行传递。形参复制的是指针的地址,通过修改指针所指地址存储的值来改变实参。

复制实参的局限性:

1)当要传递的实参是很大的对象时,复制对象所有的元素的代价太大;

2)没有办法对要传递的对象进行复制时,如要传递的是数组,而数组不能直接进行复制。

2.引用类型的形参(牢记关键词——实参的别名)

使用引用类型的形参要牢记,此时传递的参数与实参有着直接的关系。

如果使用引用类型的实参的唯一目的是为了避免大量的复制实参,而不对实参做修改,最好使用的形参类型为const 类型名&。

当子使用引用类型的形参时,要注意const在其中的影响。如果传递的实参本来是有const特性的,则不能使用非const类型的形参,这样有违const对象的使用规则。总结一下可以归纳为一下两点:

1)当函数的形参类型是const类型时,可以通过const类型的实参调用函数,也可以用非const类型的实参调用函数。

2)当函数的形参类型是非const类型时,只能用非const类型的实参调用函数。

综上两点可以看出,在不需要修改实参的情况下,函数的形参类型声明为const类型时,初始化的限制条件会相对放松些。所以有一种情况应当引起重视,就是应该吧不需要修改的应用形参定义为const引用。因为普通的非const应用会限制函数的应用,比如,这样的形参不能用const对象初始化,不能用字面值或产生右值的表达式初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: