c++中引用形参与非引用形参对比
2012-02-08 09:23
211 查看
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
这类形参都是在调用函数时,在栈中临时分配一个局部副本,然后初始化,即复制实参传递的数据。调用函数并没有访问实参传递值本身,也因此不会修改实参传递的数值,即函数对这类形参所做的操作和改动仅仅是改变了局部副本的值,不会影响到实参传递的数据本身。
非引用形参表示对应实参的局部副本,同时也意味着都需要开销,不同的是指针形参所花的时间开销和存储开销基本是固定而且很小,而普通非指针对象的开销则需要根据对象具体大小来定。一旦函数执行结束,这些局部变量的值也就没有了。
注意对于指针形参,希望不要混淆其值所表示的意思。指针形参值是指一个用来存储地址的地址值(是实参地址的一个局部副本,并非实参地址本身),而非其存储地址所指的对象值。明白指向指针的指针就比较容易理解这点了,呵呵,这样对于要操作是一个指针实参的话,那么可以使用一个指向指针的指针形参即可。例如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
相关文章推荐
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- C++ 引用类型作为函数的形参 (不用第三个数交换两个数)
- Go 到底有没有引用传参(对比 C++ )
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- C++重载函数 const形参 引用指针 const_cast
- C++引用调用、内联函数、带默认形参值的函数
- C++引用和指针简单样例对比
- C++使用引用形参的优点:
- Go语言到底有没有引用传参(对比 C++ )
- C++ 如何引用结构体数组作为函数形参
- C++中函数用普通变量,指针,引用做形参的区别
- C++函数引用形参和非引用形参
- C++字符串变量作为函数形参传递(引用方式)
- c++中函数形参为引用时!!!
- 【day0402】C++引用形参
- C++函数引用形参和非引用形参
- C++形参--引用与实体的选择
- C++中const用法(3)——引用形参问题
- C++将形参定义为引用类型的一些情况
- C++ -- 函数:引用形参