C++之引用

来源:互联网 发布:北京装修公司 知乎 编辑:程序博客网 时间:2024/05/16 06:35

C++中的引用就相当于对一个变量的别名。

       int a,j=3;       int &b=a;       b=j;

出现b的地方,就相当于a,可以把b都替换掉a。

注意:

1. 引用在声明时必须进行初始化。

2. 引用在初始化后,就相当于那个变量。而且这个应用不可以再指向其他变量。

3. 引用本身不占有内存,系统不分配内存。

4. 对一个数组的引用:

       int A_a[10]={0};       int (&A_b)[10]=A_a;

其实:1和2总结起来有点像常量指针。

       int &b=a;       int * const c=&a;
c和b一样,声明必须初始化。

c和b一样,不能再指向其他内容。

 

一个有意思的事情:

何时才能让一个已经初始化的引用再指向其他变量?以用来判断注意2的正确性。

class A{public: A(int& _a):a(_a){}private: int& a;};int main(){       int i=1,j=2;       Aa(i);       Ab(j);       //a=b;   error       system("pause");       return 0;}

这种情况很有意思,a的a是i的引用,b的a是j的引用,a=b赋值操作,系统内部认为我们想要把a的a变成j的引用。这样就是违法的。

思考:系统提供的赋值操作不就是a.a=b.a吗?而这样显然是合法的啊。

其实系统提供的默认赋值操作不单纯只是变量与变量的=,这么简单的啊。

 

当一个类的成员变量是引用时,

1> 这个变量必须在构造函数的初始化列表中赋值,不能在构造函数内进行=号赋值。

class A{public: A(int i):b(i){}private: int & b;};

2> 这个类的对象之间是禁止赋值的。如上例。

1 0