我只要一聽到被面試者說:"const意味著常數"(不是常數,可以是變數,只是你不能修改它),我就知道我正在和乙個業餘者打交道。去年dan saks已經在他的文章裡完全概括了const的所有用法,因此esp(譯者:embedded systems programming)的每一位讀者應該非常熟悉const能做什麼和不能做什麼.如果你從沒有讀到那篇文章,只要能說出const意味著"唯讀"就可以了。儘管這個答案不是完全的答案,但我接受它作為乙個正確的答案。(如果你想知道更詳細的答案,仔細讀一下saks的文章吧。)
如果應試者能正確回答這個問題,我將問他乙個附加的問題:下面的宣告都是什麼意思?
const只是乙個修飾符,不管怎麼樣a仍然是乙個int型的變數
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
本質:const在誰後面誰就不可修改,const在最前面則將其後移一位即可,二者等效
前兩個的作用是一樣,a是乙個常整型數。第三個意味著a是乙個指向常整型數的指標(也就是,指向的整型數是不可修改的,但指標可以,此最常見於函式的引數,當你只引用傳進來指標所指向的值時應該加上const修飾符,程式中修改編譯就不通過,可以減少程式的bug)。
第四個意思a是乙個指向整型數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的)。最後乙個意味著a是乙個指向常整型數的常指標(也就是說,指標指向的整型數是不可修改的,同時指標也是不可修改的)。
如果應試者能正確回答這些問題,那麼他就給我留下了乙個好印象。順帶提一句,也許你可能會問,即使不用關鍵字 ,也還是能很容易寫出功能正確的程式,那麼我為什麼還要如此看重關鍵字const呢?我也如下的幾下理由:
1) 關鍵字const的作用是為給讀你**的人傳達非常有用的資訊,實際上,宣告乙個引數為常量是為了告訴了使用者這個引數的應用目的。如果你曾花很多時間清理其 它人留下的垃圾,你就會很快學會感謝這點多餘的資訊。(當然,懂得用const的程式設計師很少會留下的垃圾讓別人來清理的。)
2) 通過給優化器一些附加的資訊,使用關鍵字const也許能產生更緊湊的**。
3) 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的引數,防止其被無意的**修改。簡而言之,這樣可以減少bug的出現。
const關鍵字至少有下列n個作用:
(1)欲阻止乙個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;
(2)對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;
(3)在乙個函式宣告中,const可以修飾形參,表明它是乙個輸入引數,在函式內部不能改變其值;
(4)對於類的成員函式,若指定其為const型別,則表明其是乙個常函式,不能修改類的成員變數;
(5)對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為「左值」。
C 之const關鍵字
函式與const 類與const 使用const關鍵字修飾的常量是唯讀的,在程式執行時不能更改。const關鍵字可以用在型別名前,也可以用在型別說明符後。常量 const double rate 0.069 const在型別名之前 const int amount 10 string const n...
C語言關鍵字之const
const關鍵字是嵌入式程式設計師必須熟悉的。因為它的使用可以增加程式的健壯性,並且使讀者更好地理解程式。它所修飾的變數被叫做 唯讀變數 注意 唯讀變數 常量 千萬不要說被const所修飾的變數就是常量!那只能說明你對const還不太理解!下面就讓我們來分析一下const。首先看以下定義 const...
C 之const關鍵字用法
c const 允許指定乙個語義約束,編譯器會強制實施這個約束,允許程式設計師告訴編譯器某值是保持不變的。只有乙個const,如果const位於 左側,表示指標所指資料是常量,不能通過解引用修改該資料 指標本身是變數,但可以指向其他的記憶體單元。等價於 const int p int const p...