C++之引用

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> 这个类的对象之间是禁止赋值的。如上例。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。