引用即別名
基本用法
int a=5;
int &b=a;
這裏b就是a的一個引用,我們對a或b的修改都會影響對方,因爲兩者實際上是一個對象,只不過有不同的名字
引用的類型需要和與之綁定的對象嚴格匹配,除了以下兩種情況
const
的引用
double a = 3.14;
const int b = a;
//把 b 輸出得到 3
此處對 b 的操作應該是整數運算,但是 a 卻是一個雙精度浮點數而非整數。爲了確保 b 綁定一個整數,編譯器把上述代碼變成了如下形式:
double a = 3.14;
const int temp = a;
const int &b = temp;
還有一點值得注意的是如果const引用的是一個非const對象,那麼這個引用實際的對象是一個非常量,我們我可以通過其他方法改變這個const引用的值。。。自己都被繞暈,還是看代碼
int a = 5;
const int &b = a;
a = 3;
cout << b << endl;//輸出3
這裏,雖然b是一個const引用,我們修改a的值,仍然會影響b
- 存在繼承關係的類
我們可以將積累的指針或引用綁定到派生類對象上,這部分還沒深入理解,留坑待補…
引用與指針的區別
- 非空區別:任何情況下不能使用指向空值的引用
- 合法性區別:使用引用前不需要測試它的合法性,指針則總是需要先判斷是否爲空
- 可修改區別:指針可以被重新賦值以指向另一個不同的對象,引用總是指向在初始化時被指定的對象
- 應用區別:應該根據不同的使用場景來使用引用還是指針