阅读了一篇不错的C++ 引用参数 深入分析,摘要如下:
把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制,在按值传递时,函数操纵的是实参的本地拷贝。
一、引用参数的三种常见用法:
- 需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。
- 向主调函数返回额外的结果。
- 向函数传递大型的类对象。
二、如果引用参数不希望在被调用的函数内部被修改,那么把参数声明为 const 型的引用是个不错的办法。
三、 我们可以声明任意内置数据类型的引用参数
四、引用参数还是指针参数
这两种参数都能够改变实参的值,也可以有效的传递大型类对象,怎么样决定参数该声明成哪种呢? 根本区别是:引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象;指针可以指向一系列不同的对象也可以什么都不指向。因为指针可能指向一个对象或没有任何对象,所以函数在确定指针实际指向一个有效的对象之前不能安全地解引用(dereference)一个指针。另一方面,对于引用参数,函数不需要保证它指向一个对象。引用必须指向一个对象,甚至在我们不希望这样时也是如此。 如果一个参数可能在函数中指向不同的对象,或者这个参数可能不指向任何对象,则必须使用指针参数 。 引用参数的一个重要用法是:它允许我们在有效地实现重载操作符的同时,还能保证用法的直观性。