c++中引用形参与非引用形参对比
来源:互联网 发布:最游记淘宝端 编辑:程序博客网 时间:2024/05/19 05:34
1.非引用形参包括普通对象形参和指针对象形参
这类形参都是在调用函数时,在栈中临时分配一个局部副本,然后初始化,即复制实参传递的数据。调用函数并没有访问实参传递值本身,也因此不会修改实参传递的数值,即函数对这类形参所做的操作和改动仅仅是改变了局部副本的值,不会影响到实参传递的数据本身。
非引用形参表示对应实参的局部副本,同时也意味着都需要开销,不同的是指针形参所花的时间开销和存储开销基本是固定而且很小,而普通非指针对象的开销则需要根据对象具体大小来定。一旦函数执行结束,这些局部变量的值也就没有了。
注意对于指针形参,希望不要混淆其值所表示的意思。指针形参值是指一个用来存储地址的地址值(是实参地址的一个局部副本,并非实参地址本身),而非其存储地址所指的对象值。明白指向指针的指针就比较容易理解这点了,呵呵,这样对于要操作是一个指针实参的话,那么可以使用一个指向指针的指针形参即可。例如void func(int ** ptr),调用时使用&取指针地址即可。
2.引用形参同样包括指向普通对象引用形参和指向指针的引用形参
当你对第一情况有理解后,那么引用形参与指针形参的区别除了参考书中说明外,也可以参考http://bbs.chinaunix.net/thread-1614148-1-1.html里面对引用和指针的解释与说明讨论(主要是OwnWaterloo说的)。
感觉得比较多人认为使用引用形参不需要开销,然后就觉得使用引用形参会比指针形参更高效,实际并非如此。
在 C++ 中,使用引用形参看起来确实会更安全和更自然些(这就好比杀鸡不用牛刀);当然这是在知道什么情况该用时才这么说的,呵呵。
通常,引用可以实现的,指针也可以实现,但指针可以实现的功能,引用就不一定可以。
以上不考虑static 、inline 和 const情况,我想应该会有其他更好看法和解释吧,其实本来我是想讨论普通函数的指针形参值是实参传递的一个局部副本,是需要开销的,而且对该值所做的操作和改变是不影响实参传递值的,(这里好害怕会被人误解地址所指的内容啊);另外一个就是引用形参与指针形参的区别了,这个其实看了引用和指针的差别资料大概也了解了。主要是查了一下,好像比较少说明形参使用的情况。
转:http://bbs.chinaunix.net/thread-3562774-1-1.html
- c++中引用形参与非引用形参对比
- 指针形参与引用形参
- 函数参数——普通形参与引用形参
- 非const 引用形参
- C++Primer:函数(参数传递-非引用形参)
- 一. C++非引用形参
- 引用,引用形参,指针形参与指向指针的引用形参,内存泄露及free相关
- C++函数引用形参和非引用形参
- 函数形参(非引用,指针,引用)
- 关于C的指针,Java/Python的引用,形参与实参个人理解
- 深刻理解Java中形参与实参,引用与对象的关系
- 数组的形参与实参,通过引用传递数组
- Java实参和形参与传值和传引用
- 关于引用数据类型的形参与实参讨论
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- 引用传参与指针传参
- C++:在非MFC程序中如何引用CString?
- 函数的形参(非引用形参、指针形参、引用形参)
- MBR简介
- 第九周作业 3 (聪明的富翁)
- 分享:产品经理的逻辑性
- poj3616
- 制作折叠菜单
- c++中引用形参与非引用形参对比
- mssql查询和删除表中重复的数据(根据唯一列值)
- 正则表达式
- DSMOS has arrived
- Java(2012/2/8)
- 当NT的API版本不够高时错误提示
- java多线程
- javascript压缩--UglifyJS
- 组合模式