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> 这个类的对象之间是禁止赋值的。如上例。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。