register
用register宣告的變數稱暫存器變數,在可能的情況下會直接存放在機器的暫存器中;
但對32位編譯器不起作用,當global optimizations(全域性優化)開的時候,它會做出選擇是否放在自己的暫存器中;
不過其它與register關鍵字有關的其它符號都對32位編譯器有效。
const
被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。
它可以修飾函式的引數、返回值,甚至函式的定義體。(特別注意,在c語言中,const修飾的變數本質依舊是變數;而在c++中,則變為常量。)
1>引數
a.對於非內部資料型別的輸入引數,應該將「值傳遞」的方式改為「const引用傳遞」,目的是提高效率。
例如將void func(a a) 改為void func(const a &a)。
b.對於內部資料型別的輸入引數,不要將「值傳遞」的方式改為「const引用傳遞」。
否則既達不到提高效率的目的,又降低了函式的可理解性。
例如void func(int x)不應該改為void func(const int &x),應該寫成void func(const int x)。
2>返回值
a.如果給以「指標傳遞」方式的函式返回值加const修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const修飾的同型別指標。
例如:const char * getstring(void);char *str = getstring();//錯誤const char *str = getstring();//正確
b.如果函式返回值採用「值傳遞方式」,由於函式會把返回值複製到外部臨時的儲存單元中,加const修飾沒有任何價值。
3>函式
const成員函式的宣告中,const關鍵字只能放在函式宣告的尾部,表示該類成員不修改物件
static
1>修飾變數
a.靜態全域性變數,作用域僅限於變數被定義的檔案中,其他檔案即使用extern 宣告也沒法使用他。
準確地說作用域是從定義之處開始,到檔案結尾處結束,在定義之處前面的那些**行也不能使用它。想要使用就得在前面再加extern。
b.靜態區域性變數,在函式體裡面定義的,就只能在這個函式裡用了,同乙個文件中的其他函式也用不了。
由於被static 修飾的變數總是存在記憶體的靜態區,所以即使這個函式執行結束,這個靜態變數的值還是不會被銷毀,函式下次使用時仍然能用到這個值。
2>修飾函式
函式前加static 使得函式成為靜態函式。
但此處「static」的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案(所以又稱內部函式)。
使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名。
volatile
簡單的說volatile的作用避免編譯器優化。
如果沒有volatile關鍵字,則編譯器可能優化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。
typedef
typedef 的真正意思是給乙個已經存在的資料型別(注意:是型別不是變數)取乙個別名,而非定義乙個新的資料型別
1>常規變數型別定義
typedef unsigned char uchar //uchar a;(unsigned char a;)
2>陣列型別定義
typedef int arr[2] //arr a;(int a[2];)
typedef int arr[m][n] //arr a;(int arr[m][n];)
3>指標型別定義
typedef int *pointer //pointer p;(int *p;)
typedef int *pointer[m] //pointer p;(int *p[m];)
4>函式宣告
typedef int fun(void) //fun f;(int f(void);)
//fun *p;(int (*p)(void);)
5>函式指標
typedef int (*func)(void) //func p;(int (*p)(void);)
define
在c或c++語言源程式中允許用乙個識別符號來表示乙個字串,稱為「巨集」。
關鍵字使用的總結。
1>無參巨集定義
其定義的一般形式為:#define 識別符號 字串
a.巨集定義是用巨集名來表示乙個字串,在巨集展開時又以該字串取代巨集名,這只是一種簡單的代換。
字串中可以含任何字元,可以是常數,也可以是表示式,預處理程式對它不作任何檢查。
如有錯誤,只能在編譯已被巨集展開後的源程式時發現。
b. 巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。
2>帶參巨集定義
帶參巨集定義的一般形式為: #define 巨集名(形參表) 字串
在巨集定義中的引數稱為形式引數,在巨集呼叫中的引數稱為實際引數。
對帶引數的巨集,在呼叫中,不僅要巨集展開,而且要用實參去代換形參。
3>防止重複定義
例如 #ifndef __headerfile***__
#define __headerfile***__
… 檔案內容
… #endif
new關鍵字 this關鍵字 base關鍵字
使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...
this關鍵字 static關鍵字
1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...
base關鍵字 this關鍵字
用於在派生類中實現對基類公有或者受保護成員的訪問,但是只侷限在建構函式 例項方法和例項屬性訪問器中。功能主要包括 1 呼叫基類上已被其他方法重寫的方法。2 指定建立派生類例項時應呼叫的基類建構函式。base常用於,在派生類物件初始化時和基類進行通訊。base可以訪問基類的公有成員和受保護成員,私有成...