天天看點

static和const關鍵字的特性總結



目前在校招準備階段看到很多人都說問到了這一點,故作如下總結:

static關鍵字至少有下列幾個作用:

(1)函數體内static變量的作用範圍為該函數體,不同于auto變量,該變量的記憶體隻被配置設定一次,是以其值在下次調用時仍維持上次的值;

(2)在子產品内的static全局變量可以被子產品内所用函數通路,但不能被子產品外其它函數通路;

(3)在子產品内的static函數隻可被這一子產品内的其它函數調用,這個函數的使用範圍被限制在聲明它的子產品内;

(4)在類中的static成員變量屬于整個類所擁有,對類的所有對象隻有一份拷貝;

(5)在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而隻能通路類的static成員變量。

const關鍵字至少有下列幾個作用:

(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顯然不符合程式設計者的初衷,也沒有任何意義。