c++基礎知識學習---第二天

本片博客是作者在學習c++的過程中的筆記記錄,希望和各位讀者一起學習交流

引用

  1. 引用概念:
    引用可以看做是一個已定義變量的別名
    語法:type & name = var; 通過name可以操作var指向的內存

  2. 引用是c++的語法範疇

  3. 普通引用在聲明的時候必須用其他變量進行初始化
    引用作爲函數參數聲明時不進行初始化
    普通變量做函數參數:在主調函數進行調用的時候,將拷貝一份數據給形參
    引用做函數參數:在主調函數進行調用的時候,形參的意思就是實參的別名
    指針做函數參數:在主調函數進行調用的時候,將地址傳給形參

  4. 引用的意義:
    引用作爲其他變量的別名而存在,因此一些場合可以替代指針
    引用相對於指針有更好的可讀性和實用性

  5. 引用的本質:(引用在定義的時候就必須進行初始化,而const修飾的常量在定義的時候也必須進行初始化)

    1. 引用在c++內部實現是一個指針常量
      eg:type &name === type *const name
    2. c++編譯器在編譯過程中使用常指針作爲內部的實現,因此引用所佔的空間大小於指針相同
    3. 從使用的角度,引用會讓人誤會其只是一個別名,沒有自己的存儲空間。這是c++爲了實用性做出的細節隱藏
      在這裏插入圖片描述     在這裏插入圖片描述
  6. 函數返回值是引用(當返回引用的時候返回的是地址)
    1. 當返回的是棧變量(局部變量)的時候,不能成爲其他引用的初始值,不能作爲左值使用,因爲在函數結束的時候,會釋放局部變量,這種返回引用是非法的。
    2. 若返回的是靜態變量或者是全局變量的時候(內存空間沒有釋放),既可以作爲右值使用,也可以作爲左值使用
    3. 函數返回值和返回引用區別
      函數返回值會產生一個臨時變量作爲函數函數返回值的副本,返回引用時返回對象本身(因此可以做左值)

  7. 指針的引用
    用法:
       int a = 0;
       int * b = &a;
       int * &c = b;

  8. 常引用:讓變量擁有隻讀屬性
    用法:
       用變量初始化引用
          int a;
          const int &b = a;
          a = 1;//正確
          b = 2;//錯誤
       用字面量初始化引用
          const int a = 40;//c++編譯器會將a放在符號表中
          int &a = 41;//錯誤 引用就是給一個內村起別名,但是41沒有地址
          const int &m = 43;//正確,會給43分配內存空間

c++對c的函數擴展

  1. inline內聯函數
    c++中的const常量可以替代宏常數定義
    如:const int A = 3; #define A 3
    c++中可以使用內聯函數代替宏代碼片段
    c++中使用inline關鍵字聲明內聯函數
    內聯函數聲明時inline關鍵字必須和函數定義(函數的實現)結合在一起,否則編譯器會直接忽略內聯請求
    結論:
    1. 內聯函數在編譯時直接將函數體插函數調用的地方
    2. inline只是一種請求,編譯器不一定允許這種請求
    3. 內聯函數省去了普通函數調用時壓棧,跳轉和返回的開始
    4. 內聯函數不能存在任何形式的循環語句,不能存在過多的條件判斷語句
  2. 默認參數
    1. c++可以在函數聲明時爲參數提供一個默認值,當函數調用時沒有指定這個參數的值,編譯器會自動用默認值代替
    2. 一旦在一個函數調用中開始使用默認參數值,那麼這個參數後的所有參數都必須使用默認值參數
  3. 函數佔位參數
    佔位參數只有參數類型聲明,沒有參數名聲明,一般情況下,在函數體內部無法使用佔位參數
  4. 函數重載
    1. 概念
      函數名相同,參數不同的函數稱爲函數重載
    2. 函數重載的判斷標準
      函數重載至少滿足下面的一個條件:
      參數個數不同、參數類型不同、參數順序不同
    3. 函數返回值不是函數重載的判斷標準
    4. 函數調用標準
    5. 函數重載的本質是相互獨立的不同函數(靜態鏈編)
  5. 函數重載和函數指針結合
    當使用重載函數名對函數指針進行賦值時,根據重載規則挑選與函數指針參數列表一致的候選者。嚴格匹配候選者的函數類型與函數指針的函數類型
下面的是筆者的微信公衆號,歡迎關注,會持續更新c++、python、tensorflow、機器學習、深度學習等系列文章

                      在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章