再學c++_2014_11_4_基礎(一)
example b=a;//每次賦值都是從a取值,不要求編譯器優化做硬體用的多一點 }//如果沒有volatile 關鍵字,編譯器將會進行優化,那麼每次執行到m=a和b=a的時候都是從m來賦值的,在example處加上m=i; ,則b的值將是i;但是volatile關鍵字卻解決了這個問題,這讓b=a的值是從a裡取來的,即禁止編譯器進行程式碼優化!! 32位就是一個塊(32位系統)cash抓塊 4.行內函數 { 1.提高程式執行效率的一種方式 2.更安全的一種巨集!!! 3.遞迴函式不能用內聯展開 4.直接在呼叫點展開 5.行內函數一旦被展開,就不會產生行內函數的符號表,一般只會寫在標頭檔案裡面,如果沒有展開那另說 {inline int sum() { return a+b; } }int ret = sum(18,9)=18+9; } 5.引用和const的概念 { const in C { const定義的變數不能用來宣告陣列 {const int len =21; int sum[len]={0};} 1.常變數,但是還是變數 } const in C++s//真真正正的const { 1.不佔記憶體的常量,只有用到const_cast<>,&等一系列涉及地址記憶體的時候進行轉化時才會給他分配記憶體 2.預編譯時候就會用具體的數字來覆蓋變數名字 3.編譯階段要確定宣告陣列的長度,在分離編譯時,就能 4.const變數可以定義陣列 5.const在當前檔案(*.h)下替換,等到編譯完畢,連結的時候,就沒有了。所以外部(*.cpp)用來給整形int a賦值是不對的,因為引用的是一個不存在的東西,系統會報錯。 { *.h { const int b=9; } .cpp { int a=0; a=const b; //wrong } } 6.extern const int a;外部有人引用,a則分配記憶體,把他當做c語言來編譯 } const_cast<TYPE> { const int data=1024; int*p=const_cast<int*>(&data) *p=222; cout<<data<<endl; } 引用: { 1.引用必須是一個有效的記憶體 const int &a = 10 引用的臨時的變數 int &a則錯誤,因為 10只是一個字面常量,沒有記憶體的 2.引用不同變數的時候則是需要加const才能通過
TYPE_INT sum(TYPE_INT a, TYPE_INT b) { /*未完*/2014_11_4 } } } int a=10; int b=20; int *p=&a; int &c=b; //物理實現上就是用指標,但是不能解引用,只是別名。比指標安全多了 typedef int a[2] { }p; p[2]? int p[][2]--->p[] int[2] (理解intp[][2]) }