把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制.在按值传递时,函数操纵的是实参的本地拷贝;[color=Red]当参数是引用 时,函数接收的是实参的左值而不是值的拷贝[/color].这意味着函数知道实参在内存中的位置因而能够改变它的值或取它的地址.
引用reference ,有时候又称为别名alias .它可以用作对象的另一个名字,通过引用,我们可以间接地操纵对象.使用方式类似于指针,但是不需要指针的语法.在实际的程序中引用主要被用作函数的形式参数,通常将类对象传递给一个函数。 引用类型由类型标识符和一个取地址操作符来定义,引用必须被初始化. 一旦引用已经定义,它就不能再指向其他的对象.这是它为什么必须要被初始化的原因. 引用的所有操作实际上都被应用在它所指的对象身上,包括取地址操作符. 每个引用的定义必须以取地址操作符开始 // 定义一个对象、一个指针和一个引用 int ival3 = 1024, *pi = &ival3, &ri = ival3; ================================================================================================= 那么什么时候将一个参数指定为引用比较合适呢? 第一种 像swap()的情况,它必须将一个参数改变成指针来允许改变实参的值时就比较合适. 第一种 前面记过没保存就丢了,懒得再重复,大意就是swap(int a,int b),要想改变实参a,b的值就必须用指针或引用来做.--swap(int& a,int& b). 第二种 我理解就是返回一个新的东东. 第三种 当访问时默认是拷贝实参副本进入存储区运算.但是当实参是大型类对象时,拷贝副本的效率将高于直接运算的效率,这时就需要把参数指定为引用.如果指定引用时又担心被调用的实参被修改,可以为实参加上const,来保证实参不会被修改. 为了支持类class 类型——尤其是支持有效直观地实现重载操作符机制,C++特别引入了引用机制 |
|