简明C++教程(2) ---新的语法现象(引用)
时间:2010-04-01 来源:bluedrum
Andrew Huang [email protected]
1.为什么要引用 C++中大量使用引用,为什么会出现引用这一语法现象? 这要先从C的两种参数传递说起。一种是传值。假设要做一个交换函数,大家都知道如下代码是没办法实现这一目的的。因为这里用了传值,值只能做单向传递来用。
int swap01(int a,int b) |
在C语言里面一般用传地址来处理。下面代码可以实现交换功能。
#define PRINT_INT(e) printf("%s=%d\n",#e,e) |
用传地址的话,有几个缺点,一是书写上多了很多*,二个是指针可以任意移动,象把注释里的char * c = (char *)a ;*c=0x2f;被打开a的值会被部分破坏。
因此C++引入一种新的语法-----------引用.
2.引用格式
C++引用格式是 类型 & 引用变量名 ,如 int & a;这种写法不会与取变量地址 int *b =&a; 和位与 a & b混淆.
引用是什么?相当于一个安全指针,有指针双向传递功能,传递高效率的优点。又象普通变量一样书写。并且在语法上能有效防止指针常见被误用的几个错误。因此C++大量使用引用。以下就是一个引用版的交换函数,可以看到书写几乎跟swap01一致,但是值能交换过来
#define PRINT_INT(e) printf("%s=%d\n",#e,e) |
3.引用为什么防止误用?
3.1 引用初始化只能通过赋给一个现成变量进行
int & a = b;
这样防止空指针和非法地址。因为在引用定义里,以下两种是
被禁止的。
int &d ;
int &e = 100;
3.2 定义后,对引用的只能进行赋值。不能移动地址,或换成新的变量引用。
不能移动地址,这样防住在指针内部移动。
int &a = b; a++;//这样相当于给b的空间值+1
也能在运算中改变引用的对象的地址。
int &f = a;
f = b; //这样仍然是赋值。
//用指针就会有如下风险。
int *f = &a;
f = &b;
因此引用在很多面向对象的开发语言使用,象JAVA的传参默认全部采用引用。