一. C++中的引用
引用(reference)实际上是为对象定义了一个别名,主要用作函数的形参。
引用通过在变量名前加上"&"符号来定义。
例如:
二. 引用作为形参
下面的例子,交换两个变量的值:
C++中也可以通过引用来完成:
三. 指针与引用的区别:
. 指针可以赋值为NULL,但是引用定义的时候必须初始化,没有NULL引用的说法。
. 引用初始化时一旦关联了一个对象,那么后面就不能将这个引用关联到其他对象了,而指针是可以改变的。
. 指针是一个变量,而引用只是对象的一个别名。
引用(reference)实际上是为对象定义了一个别名,主要用作函数的形参。
引用通过在变量名前加上"&"符号来定义。
例如:
int ival = 1024;
int &refVal = ival; // ok: refVal refers to ival
int &refVal2; // error: a reference must be initialized
int &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 const
int &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 argument
v1 = tmp;
}
swap本意是想交换v1、v2两个变量的值,但这里却不能实现,因为函数形参只是传递变量的一个拷贝,而不是变量本身(C中可以通过指针来完成)。
C++中也可以通过引用来完成:
// ok: swap acts on references to its arguments
void swap(int &v1, int &v2)
{
int tmp = v2;
v2 = v1;
v1 = tmp;
}
因为操作引用实际上引用所指向的对象,所以这里交换两个变量的值是能够实现的。
三. 指针与引用的区别:
. 指针可以赋值为NULL,但是引用定义的时候必须初始化,没有NULL引用的说法。
. 引用初始化时一旦关联了一个对象,那么后面就不能将这个引用关联到其他对象了,而指针是可以改变的。
. 指针是一个变量,而引用只是对象的一个别名。