使用引用参数的主要原因有两个:
(1)程序员能够修改调用函数中的数据对象
(2)通过传递引用而不是整个数据对象,可以提高程序的运行速度 (不会存在内存中的临时拷贝现象)
解释:当数据对象较大时(如结果后数据对象),第二个原因更重要,这些也是使用指针参数的原因。因为引用参数实际上是基于指针的代码的另一个接口。
那么就会引出——什么时候应该使用引用?什么时候应该使用指针?什么使用应该使用值传递?
下面是总结的原则:
- (1)对于使用传递的值而不做修改的函数
- a. 如果数据对象很小,如内置数据类型(int)或小型结构,则按值传递;
- b .如果数据对象是数组,则使用指针,因为这是唯一的选择,最好是将指针声明为指向const的指针;
- c. 如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率,这样可以节省复制结构所需的时间与空间;
- d. 如果数据对象是类对象,则使用const引用,类设计的语义常常要求使用引用,这是C++主要特性。因此传递类对象参数的标准方式是引用传递。
- (2)对于修改调用函数中的数据的函数
- a. 如果数据对象是内置数据类型,则使用指针。如调用方式为hanshanbuleng(&y);很显然是想该函数修改y
- b. 如果数据对象是数据,则只能是使用指针;
- c. 如果数据对象是结构,则使用指针或引用;
- d. 如果数据对象是类对象,则使用引用。
当然,这只是一般规律的总结,在没成为大牛之前我还是牢记一下吧,我等“修炼”突破某种至高之境,有很可能有充分的理由做出其他的选择。
参考文献:C++ Primer Plus