const是c/c++語言中的關鍵字,但是如果用的好,可以極大地提高**的健壯性。一般來說const使用的地方還是蠻多的,但是主要還是下面幾個地方:(1)普通變數的保護;(2)位址空間的保護;(3)類初始變數的宣告和保護;(4)類變數在函式中的保護。const的保護主要來自於編譯器層面,和程式的執行沒有關係。
(1)普通變數的保護
const int data = 10;
const char str = 'a';
const double pi = 3.14;
上面的**就是一組全域性變數的定義,如果在函式中變數發生了修改,那麼**就會編譯失敗。
(2)位址空間的保護
const成員變數 就是在類變數定義的時候前面新增const關鍵字。和普通的成員變數不一樣,const變數在建構函式中一定要初始化操作的。如果沒有const關鍵字,那麼在建構函式內部就無所謂是不是需要初始化了。void process()
(3)類const成員變數的定義
class desk
~desk() {}
};
(4)類const函式
上面是一段函式呼叫的**。我們在53行和55行定義了desk型別的變數m和n。接著在54行和56行,我們分別利用兩個變數呼叫print函式進行處理,我們發現兩個呼叫的函式位址並不一樣,其中乙個是0x0040104b,另外乙個是0x00401046,我們可以繼續跟進去看一下:class desk
~desk() {}
void print()
void print() const
};
53: desk m;
0040122d lea ecx,[ebp-10h]
00401230 call @ilt+75(desk::desk) (00401050)
00401235 mov dword ptr [ebp-4],0
54: m.print();
0040123c lea ecx,[ebp-10h]
0040123f call @ilt+70(desk::print) (0040104b)
55: const desk n;
00401244 lea ecx,[ebp-14h]
00401247 call @ilt+75(desk::desk) (00401050)
0040124c mov byte ptr [ebp-4],1
56: n.print();
00401250 lea ecx,[ebp-14h]
00401253 call @ilt+65(desk::print) (00401046)
57: }
00401046 jmp desk::print (00401310)
0040104b jmp desk::print (004012e0)
這裡雖然是兩個跳轉函式,但是事實已經證明這裡的兩個函式確實是不一樣的,這也證明了我們的判斷是正確的。 用彙編的眼光看C (之const屬性)
const是c c 語言中的關鍵字,但是如果用的好,可以極大地提高 的健壯性。一般來說const使用的地方還是蠻多的,但是主要還是下面幾個地方 1 普通變數的保護 2 位址空間的保護 3 類初始變數的宣告和保護 4 類變數在函式中的保護。const的保護主要來自於編譯器層面,和程式的執行沒有關係。1...
用彙編的眼光看C (之const屬性)15
const是c c 語言中的關鍵字,但是如果用的好,可以極大地提高 的健壯性。一般來說const使用的地方還是蠻多的,但是主要還是下面幾個 地方 1 普通變數的保護 2 位址空間的保護 3 類初始變數的宣告和保護 4 類變數在函式中的保護。const的保護主要來自於編譯器層 面,和程式的執行沒有關係...
用彙編的眼光看C (之嵌入彙編)
嵌入式彙編是對純彙編檔案的一種有益補充。通常會有下面幾種情況使用到彙編 1 提高 的工作效率 使用到cpu的一些特殊指令,比如說mmx指令 2 對硬體進行某種特殊的操作,比如說關中斷等,這在核心級的 中是比較常見的。但是我們講究嵌入式彙編的一些基本點和大家一起討論一下,建議大家和我一起做實驗,用事實...