免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4114 | 回复: 0
打印 上一主题 下一主题

[C++] 关于函数形参一点理解--指针形参与引用形参 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-07 22:51 |只看该作者 |倒序浏览
1.非引用形参包括普通对象形参和指针对象形参
这类形参都是在调用函数时,在栈中临时分配一个局部副本,然后初始化,即复制实参传递的数据。调用函数并没有访问实参传递值本身,也因此不会修改实参传递的数值,即函数对这类形参所做的操作和改动仅仅是改变了局部副本的值,不会影响到实参传递的数据本身。
非引用形参表示对应实参的局部副本,同时也意味着都需要开销,不同的是指针形参所花的时间开销和存储开销基本是固定而且很小,而普通非指针对象的开销则需要根据对象具体大小来定。一旦函数执行结束,这些局部变量的值也就没有了。

注意对于指针形参,希望不要混淆其值所表示的意思。指针形参值是指一个用来存储地址的地址值(是实参地址的一个局部副本,并非实参地址本身),而非其存储地址所指的对象值。明白指向指针的指针就比较容易理解这点了,呵呵,这样对于要操作是一个指针实参的话,那么可以使用一个指向指针的指针形参即可。例如void func(int ** ptr),调用时使用&取指针地址即可。


2.引用形参同样包括指向普通对象引用形参和指向指针的引用形参
当你对第一情况有理解后,那么引用形参与指针形参的区别除了参考书中说明外,也可以参考http://bbs.chinaunix.net/thread-1614148-1-1.html里面对引用和指针的解释与说明讨论(主要是OwnWaterloo说的)。
感觉得比较多人认为使用引用形参不需要开销,然后就觉得使用引用形参会比指针形参更高效,实际并非如此。
在 C++ 中,使用引用形参看起来确实会更安全和更自然些(这就好比杀鸡不用牛刀);当然这是在知道什么情况该用时才这么说的,呵呵。
通常,引用可以实现的,指针也可以实现,但指针可以实现的功能,引用就不一定可以。


以上不考虑static 、inline 和 const情况,我想应该会有其他更好看法和解释吧,其实本来我是想讨论普通函数的指针形参值是实参传递的一个局部副本,是需要开销的,而且对该值所做的操作和改变是不影响实参传递值的,(这里好害怕会被人误解地址所指的内容啊);另外一个就是引用形参与指针形参的区别了,这个其实看了引用和指针的差别资料大概也了解了。主要是查了一下,好像比较少说明形参使用的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP