1. 程式人生 > >C/C++中static和const關鍵字的作用總結

C/C++中static和const關鍵字的作用總結

static 關鍵字至少有下列 n 個作用:
  (1)函式體內 static 變數的作用範圍為該函式體,不同於auto 變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;
  (2)在模組內的 static 全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;
  (3)在模組內的 static 函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;
  (4)在類中的 static 成員變數屬於整個類所擁有,對類的所有物件只有一份拷貝;
  (5)在類中的 static 成員函式屬於整個類所擁有,這個函式不接收 this 指標,因而只能訪問類的 static 成員變數。
 
const 關鍵字至少有下列 n 個作用:
  (1)欲阻止一個變數被改變,可以使用 const 關鍵字。在定義該 const 變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;
  (2)對指標來說,可以指定指標本身為 const,也可以指定指標所指的資料為 const,或二者同時指定為 const;
  (3)在一個函式宣告中,const 可以修飾形參,表明它是一個輸入引數,在函式內部不能改變其值;
  (4)對於類的成員函式,若指定其為 const 型別,則表明其是一個常函式,不能修改類的成員變數;
  (5)對於類的成員函式,有時候必須指定其返回值為 const型別,以使得其返回值不為“左值”。例如:const classA operator*(const classA& a1,const classA&a2);perator*的返回結果必須是一個 const 物件。如果不是,這樣的變態程式碼也不會編譯出錯:classA a, b, c;(a * b) = c; // 對 a*b 的結果賦值操作(a * b) = c 顯然不符合程式設計者的初衷,也沒有任何意義。
  
剖析:
  驚訝嗎?小小的 static 和 const 居然有這麼多功能,我們能回答幾個?如果只能回答 1~2 個,那還真得閉關再好好修煉修煉。
  這個題可以考查面試者對程式設計知識的掌握程度是初級、中級還是比較深入,沒有一定的知識廣度和深度,不可能對這個問題給出全面的解答。大多數人只能回答出 static 和 const 關鍵字的部分功能。