關鍵字static的做用:程序員
1)在函數體內,一個被聲明爲靜態的變量在這一函數被調用過程當中維持其值不變(該變量存放在靜態變量區)。編程
2) 在模塊內(但在函數體外),一個被聲明爲靜態的變量能夠被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。函數
3) 在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。優化
static關鍵字至少有下列n個做用:this
(1)設置變量的存儲域,函數體內static變量的做用範圍爲該函數體,不一樣於auto變量,該變量的內存只被分配一次,所以其值在下次調用時仍維持上次的值;spa
(2)限制變量的做用域,在模塊內的static全局變量能夠被模塊內所用函數訪問,但不能被模塊外其它函數訪問;指針
(3)限制函數的做用域,在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用範圍被限制在聲明它的模塊內;對象
(4)在類中的static成員變量意味着它爲該類的全部實例所共享,也就是說當某個類的實例修改了該靜態成員變量,其修改值爲該類的其它全部實例所見;內存
(5)在類中的static成員函數屬於整個類所擁有,這個函數不接收this指針,於是只能訪問類的static成員變量。作用域
關鍵字const有什麼含意? (意味着「只讀」)
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類型,以使得其返回值不爲「左值」。例如:
const classA operator*(const classA& a1,const classA& a2);
operator*的返回結果必須是一個const對象。
若是不是,這樣的變態代碼也不會編譯出錯: classA a, b, c; (a * b) = c; // 對a*b的結果賦值
操做(a * b) = c顯然不符合編程者的初衷,也沒有任何意義