const和static的使用

2021-09-30 06:23:58 字數 1716 閱讀 3599

const和static的使用

使用const。

這一點在很多經典的關於c 和c++的書籍中是必談的要點。在《exceptional c++》一書中,對這點有很精彩的描述,現摘錄如下:「沒有正確的安全意識的槍手在世界上是不可能活的很長的。const 觀念不正確的程式設計師也是一樣和沒有時間戴緊帽子的正確,沒有時間檢查帶電電線的電工一樣不會活的很長。」在c 語言中,const 修飾符表示告訴編譯器此函式將不會改變被修飾的變數的指向的任何值(除了強制型別轉換)。當把指標作為引數傳遞時,總是合適地使用const,不僅可以防止你無意中錯誤的賦值,而且還可以防止在作為引數將指標傳遞給函式時可能會修改了本不想改變的指標所指向的物件的值。如:

const int num= 7;

num = 9; //有/可能得到編譯器的警告。

const char *ptr,則表示該指標所指向的內容不會被改變,如果在程式中被發生對其賦值的操作,編譯時將出錯誤提示。如:

const char *ptr = 「hello」;

*ptr = 'h';//錯誤,所指內容不可改變也可將const 放在星號後面來宣告指標本身不可改變。如:

char* const ptr;

ptr++; //錯誤,指標本身不可改變

也可同時禁止改變指標和它所引用的內容,其形式如下: const char* const ptr;

使用static

static 是乙個能夠減少命名衝突的有用工具。將只在乙個模組檔案中的變數和函式使用static 修飾,將不會和其他模組可能具有相同名稱的函式和變數在模組連線時不會產生名稱衝突。一般來說,只要不是提供給其它模組使用的函式,和非全域性變數,均應使用static 修飾。將子程式中的變數使用static 修飾時,表示這個變數在程式開始時分配記憶體,在程式結束時釋放,它們在程式執行期間保持它們的值。如:

void func1(void)

void func2(void)

兩個子程式中的time 變數使用static 修飾,所以它們是靜態變數,每呼叫一次time將進行加1,並保持這個值。它們的功能與下面程式相似:

int time1 = 0;

int time2 = 0;

void func1(void)

void func2(void)

我們可以看出,使用static 修飾後,模組中的全域性變數減少,使得程式的更為簡單。

對於c/c++語言來講,

const就是唯讀的意思,只在宣告中使用;

static一般有2個作用,規定作用域和儲存方式.對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放;

對於全域性變數,如果以檔案劃分作用域的話,此變數只在當前檔案可見;對於static函式也是在當前模組內函式可見.

static const 應該就是上面兩者的合集.

下面分別說明:

全域性:const,唯讀的全域性變數,其值不可修改.

static,規定此全域性變數只在當前模組(檔案)中可見.

static const,既是唯讀的,又是只在當前模組中可見的.

檔案:檔案指標可當作乙個變數來看,與上面所說類似.

函式:const,返回唯讀變數的函式.

static,規定此函式只在當前模組可見.

類:const,一般不修飾類,(在vc6.0中試了一下,修飾類沒啥作用)

static,c++中似乎沒有靜態類這個說法,一般還是拿類當特殊的變數來看.c#中有靜態類的詳細說明,且用法與普通類大不相同.

static和const的使用

static 檔案域 位置域 區域性,類 在乙個類中宣告了,在類外定義,static變數定義時所在的檔案,就構成了該變數的作用範圍。乙個類的static變數,如果在標頭檔案中定義,多個其他檔案include這個檔案的時候,就會使得這個static有多個實體。也就是乙個類定義了多個static變數,然...

const和static的區別

const和static的區別 一 const 1.static 區域性變數 將乙個變數宣告為函式的區域性變數,那麼這個區域性變數在函式執行完成之後不會被釋放,而是繼續保留在記憶體中 2.static 全域性變數 表示乙個變數在當前檔案的全域性內可訪問 3.static 函式 表示乙個函式只能在當前...

static和const關鍵字的使用

header content type text html charset utf 8 static和const關鍵字的使用 static成員能夠限制外部的訪問,因為static的成員是屬於類的,是不屬於任何物件例項,因為靜態成員是在類 第一次載入的時候就建立的,所以在類的外部不需要物件而使用類名就...