天天看點

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

文章目錄

  • 1.命名空間
    • 1.1什麼是命名空間
    • 1.2命名空間的定義
    • 1.3命名空間的使用
  • 2.預設參數
    • 2.1什麼是預設參數
    • 2.2預設參數的分類
  • 3.函數重載
    • 3.1什麼是函數重載
    • 3.2為什麼C++支援函數重載C語言不支援
  • 4.extern C

1.命名空間

1.1什麼是命名空間

c++中的類和庫中有大量的關鍵字,那麼我們定義變量的時候就很容易與這些系統關鍵字發生沖突,使用命名空間的目的就是為了避免與關鍵字發生沖突;

舉個簡單的例子,有人來學校找一個叫張三的人,廣播出去後有非常多叫張三,這樣就導緻了混淆,不知道你要找誰。但是你如果加個前提,我要找4年級3班1組1号的張三,這樣就不會發生沖突了;

同樣,為了避免這種命名沖突,我們在c++中引入命名空間,在特定的作用域中進行尋找就不會發生沖突了。

1.2命名空間的定義

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

1.3命名空間的使用

由上述可知命空間的定義,那麼我們怎麼使用呢?接下來介紹命名空間的3種使用方法

1.命名空間名稱以及作用域限定符

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

2.使用using将命名空間中成員引入

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

3.使用using namespace 命名空間名稱引入

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

2.預設參數

2.1什麼是預設參數

預設參數是指,聲明或定義函數的時候為函數的參數指定一個預設值,在調用該函數的時候,如果沒有指定實參則采用該預設值,否則使用指定的實參

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

2.2預設參數的分類

預設參數分為全預設參數和半預設參數

半預設參數必須從右往左依次給出,不能間隔給;

預設參數不能在函數的命名和定義中同時出現,這是因為如果恰好兩個位置給的值不一樣,那麼編譯器就無法識别到底是使用哪個預設值;

預設值必須是常量或者全局變量

C語言不支援(編譯器不支援)

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

3.函數重載

3.1什麼是函數重載

函數重載是函數的一種特殊情況,C++允許在同一作用域内聲明幾個功能類似的同名函數,但是這些同名函數的形參清單(形參的個數或類型或順序)必須不同,常用來處理實作功能類似資料類型不同的問題;

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

3.2為什麼C++支援函數重載C語言不支援

在可執行程式運作之前,需要經過預處理,編譯,彙編,連結幾個階段;

在預處理階段進行去注釋,宏替換,頭檔案展開,條件編譯等等,在編譯階段編譯器将檢查代碼的規範性和文法,彙編階段是生成機器可識别的二進制檔案,在連結階段才會用函數名(函數名即函數位址)去尋找對應的函數的實作;

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

4.extern C

有些時候我們在C++工程之中需要用将某些函數按照C的風格來進行編譯,比如我們将C++項目打包成了一個動态庫,在後續用C語言去調用這個動态庫;

由上面函數重載可知,C++和C的函數編譯出來後,C的函數名是沒有被修飾的,C++的函數名會進行修飾,那麼我們用C就調用不了C++風格編寫的函數;

此時隻要在函數前面加上extern C告訴編譯器,将這個函數按照C語言規則來進行編譯就可以解決函數名修飾規則不同的問題了;

命名空間、預設參數、函數重載、extern C1.命名空間2.預設參數3.函數重載4.extern C

繼續閱讀