關鍵字static和const的作用

1)在函數體內,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變(該變量存放在靜態變量區)。

2) 在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。注意,只有在定義了變量後才能使用。如果變量定義在使用之後,要用extern 聲明。所以,一般全部變量都會在文件的最開始處定義。

3) 在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。

4)設置變量的存儲域,函數體內static變量的作用範圍爲該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;

5)限制變量的作用域,在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;

6)限制函數的作用域,在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用範圍被限制在聲明它的模塊內;



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關鍵字至少有下列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顯然不符合編程者的初衷,也沒有任何意義

發佈了41 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章