C++引用

来源:互联网 发布:淘宝电商差评怎么回复 编辑:程序博客网 时间:2024/05/01 03:01
一. C++中的引用

引用(reference)实际上是为对象定义了一个别名,主要用作函数的形参。

引用通过在变量名前加上"&"符号来定义。

例如:
int ival = 1024;int &refVal = ival;// ok: refVal refers to ivalint &refVal2;// error: a reference must be initializedint &refVal3 = 10;// error: initializer must be an object

注意引用是为对象定义的一个别名,操作引用时实际上是引用所指的对象,例如:
refVal += 2;
实际上是将revVal所指的对象ival加2。

类似的:
int ii = refVal;
实际上是将ival赋值给ii。

const引用,是指指向const对象的引用:

const int ival = 1024;const int &refVal = ival;// ok: both reference and object are constint &ref2 = ival;// error: non const reference to a const object
引用加上const的意义在于既不能直接修改ival的值,也不能通过引用refVal来修改ival。


二. 引用作为形参
下面的例子,交换两个变量的值:
// incorrect version of swap: The arguments are not changed!void swap(int v1, int v2){int tmp = v2;v2 = v1;// assigns new value to local copy of the argumentv1 = tmp;}
swap本意是想交换v1、v2两个变量的值,但这里却不能实现,因为函数形参只是传递变量的一个拷贝,而不是变量本身(C中可以通过指针来完成)。

C++中也可以通过引用来完成:
// ok: swap acts on references to its argumentsvoid swap(int &v1, int &v2){int tmp = v2;v2 = v1;v1 = tmp;}
因为操作引用实际上引用所指向的对象,所以这里交换两个变量的值是能够实现的。


三. 指针与引用的区别:
. 指针可以赋值为NULL,但是引用定义的时候必须初始化,没有NULL引用的说法。
. 引用初始化时一旦关联了一个对象,那么后面就不能将这个引用关联到其他对象了,而指针是可以改变的。
. 指针是一个变量,而引用只是对象的一个别名。

0 0