1. 程式人生 > >const,static,volatile關鍵字的作用

const,static,volatile關鍵字的作用

const關鍵字:   1.欲阻止一個變數被改變,可使用const,在定義該const變數時,需先初始化,以後就沒有機會改變他了;
  2.對指標而言,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;
  3.在一個函式宣告中,const可以修飾形參表明他是一個輸入引數,在函式內部不可以改變其值;
  4.對於類的成員函式,有時候必須指定其為const型別,表明其是一個常函式,不能修改類的成員變數;
  5.對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為“左值”。   static關鍵字:   1.static區域性變數在函式內定義,它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。    2.static修飾全域性變數的時候,這個全域性變數只能在本檔案中訪問,不能在其它檔案中訪問,即便是extern外部宣告也不可以。   3.static修飾一個函式,則這個函式的只能在本檔案中呼叫,不能被其他檔案呼叫。Static修飾的區域性變數存放在全域性資料區的靜態變數區。初始化的時候自動初始化為0;     (1)不想被釋放的時候,可以使用static修飾。比如修飾函式中存放在棧空間的陣列。如果不想讓這個陣列在函式呼叫結束釋放可以使用static修飾     (2)考慮到資料安全性(當程想要使用全域性變數的時候應該先考慮使用static)

  在C++中static關鍵字除了具有C中的作用還有在類中的使用


  在類中,static可以用來修飾靜態資料成員和靜態成員方法
  靜態資料成員
  (1)靜態資料成員可以實現多個物件之間的資料共享,它是類的所有物件的共享成員,它在記憶體中只佔一份空間,如果改變它的值,則各物件中這個資料成員的值都被改變。
  (2)靜態資料成員是在程式開始執行時被分配空間,到程式結束之後才釋放,只要類中指定了靜態資料成員,即使不定義物件,也會為靜態資料成員分配空間。
  (3)靜態資料成員可以被初始化,但是隻能在類體外進行初始化,若為對靜態資料成員賦初值,則編譯器會自動為其初始化為0
  (4)靜態資料成員既可以通過物件名引用,也可以通過類名引用。

  靜態成員函式


  (1)靜態成員函式和靜態資料成員一樣,他們都屬於類的靜態成員,而不是物件成員。
  (2)非靜態成員函式有this指標,而靜態成員函式沒有this指標。
  (3)靜態成員函式主要用來方位靜態資料成員而不能訪問非靜態成員。

 

volatile關鍵字:

一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子: 
    1). 並行裝置的硬體暫存器(如:狀態暫存器) 
    2). 一箇中斷服務子程式中會訪問到的非自動變數(Non-automatic variables) 
    3). 多執行緒應用中被幾個任務共享的變數