1. 程式人生 > >C++幾個重要關鍵字(包含借鑑其他博主的東西)

C++幾個重要關鍵字(包含借鑑其他博主的東西)

//記憶體 棧區 與 static區 ,C++為了相容C,#include 只是文字替換,導致一堆名稱空間之間的複雜問題,倍受人詬病

extern  關鍵字

1.基本含義:意如其名,告訴編譯器宣告的東西是外部的。

特殊用法  extern "C" + 函式,宣告這個函式翻譯優化的時候 函式名 不改變(c++因為多型等原因,會改變函式名)

2. 宣告變數用法:

 (1) 1.c 中 char a[6];  2.c 中 extern char a[];

    (2)   1.c 中 char a[6];1.h中 extern char a[];  2.c中 #include ''1.h" 即可訪問 a;(以標頭檔案宣告,來代替每次在其他檔案中宣告)

  (3) 1.c 中              ;1.h中 extern char a[6]="123456"; ; 2.c中 #inlcude “1.h” 會報錯 (定義會覆蓋extern關鍵字,顯示重複定義)

3.宣告函式變數用法

    最好參考2中(2) 用法,這樣後面 函式引數修改 後,編譯期間會報錯

//////////////////////////////////////////////////////////////////////////////////////////////////////

 static 關鍵字

  extern 表明該變數在別的地方已經定義過了,在這裡要使用那個變數.

1.基本含義:意如其名,表示靜態的變數,分配記憶體的時候, 儲存在靜態區,不儲存在棧上面.

  static 類似於隱藏,宣告即需要定義,只有一個副本,只能在本身的編譯單元內使用

  extern部分 2 中(3)方法若將extern 替換成 static ,則可以編譯通過,此時在2個編譯單元中 都有一份 副本(互不相干);但是會帶來很多問題,

  因此 static 宣告與定義 一般放在 .c 檔案中

2. c語言中使用

    修飾變數,函式  同 1 中說明

    修飾 函式中變數,這個比較特殊,肯定是放在靜態區,生命週期是到程式結束!!

3. c++語言中使用,主要是類中

     修飾成員變數,成員函式 屬於類所有,一個副本

/////////////////////////////////////////////////

const 關鍵字

1. const 自帶屬性 是 static 宣告即需要定義,只有一個副本,只能在本編譯單元內使用

2. extern const 屬性 是 extern 

3. const int * const p ;

4. 給定一個 類 class A,可能存在使用const的地方,第一行編號為 1,2,3,4,5,6,第二行編號為11,22,33,44,55,66

     A a1(類變數),           普通成員函式    , 普通類成員  , 普通成員  ,   普通函式引數   ,  普通返回引數

   const A a1(類常變數);const 成員函式 ;const 類成員, const 成員,   const函式引數  , const 返回引數

     普通成員函式 表示,我將要修改呼叫該函式的物件的資料

    const成員函式 表示,  不會修改呼叫該函式的物件的資料  (實在要修改,可以將某個成員變數設定為 mutable )

   正確的訪問邏輯是:

    const成員函式 可以訪問一切,普通成員函式不能訪問 const物件任何成員

    const類物件 只能訪問 const成員函式,普通類物件 可以訪問一切

    const成員,必須在初始化列表中初始化

    作為一種良好的程式設計風格,在宣告一個成員函式時,若該成員函式並不對資料成員進行修改, 應儘可能將該成員函式宣告為const成員函式

5 const &: 把不變的給 可變 的是有問題的

///////////////////////////////////////

volatile : 防止編譯器優化,有點複雜