C++ 中的引用 引用與指針的區別

引用即別名

基本用法

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

  • 存在繼承關係的類
    我們可以將積累的指針或引用綁定到派生類對象上,這部分還沒深入理解,留坑待補…

引用與指針的區別

  1. 非空區別:任何情況下不能使用指向空值的引用
  2. 合法性區別:使用引用前不需要測試它的合法性,指針則總是需要先判斷是否爲空
  3. 可修改區別:指針可以被重新賦值以指向另一個不同的對象,引用總是指向在初始化時被指定的對象
  4. 應用區別:應該根據不同的使用場景來使用引用還是指針
發佈了174 篇原創文章 · 獲贊 322 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章