static與const成員變數

2021-06-29 01:39:30 字數 1480 閱讀 9076

static

很多公司會喜歡問static的作用是什麼,如果不考慮在類當中的應用,其主要作用有以下三點:

1)隱藏

加了static的全域性變數,在其他原始檔中就「看不見」了。也就是說,加了static,可以用來解決不同檔案裡定義了同名的函式或者變數。

2)預設初始化為0

對於未初始化的全域性變數和靜態變數,都是儲存在同一塊區域——bss段。在bss段中,所有位元組的預設值為0x00,這樣就減少了我們初始化的工作量。

3)保持區域性變數內容

這一點也是大家都知道的特性,static變數會靜態儲存值,於是可以用於計數。

那麼在類中,static 又發揮著什麼樣的作用呢?

在類中,所有物件是共享static變數的,它是被儲存在全域性(靜態)儲存區里的,也就是說我們在計算某個類所佔記憶體大小的時候,static變數是不用考慮的,這也是很多公司喜歡考察的地方。也由於同一類的物件共享static變數,對於static變數的初始化,我們需要在類外進行。這是為什麼呢?

試想,若static變數在類內初始化,對於物件中的static變數值,就會出現不一致的情況。這顯然是與「所有物件共享static變數」相違背的。定義的方法很簡單,如下:

class b;

int b::a=2;//類外不要新增static關鍵字,新增則編譯不通過

說到static成員變數就會想到const成員變數,這兩者又有什麼不同呢?

const

提到const首先想到的是常量的概念,即一旦定義初始化了,就不能修改。沒錯,於是在c++所有的const變數在定義時必須初始化,不然就不是常量啦。

與static有一點相似的是,const定義全域性變數的時候,這個變數值在這個檔案裡可見,而不能被其他檔案所訪問。如果想整個程式都能訪問,那就要加上extern。

那麼在類中const又與static有什麼不同的呢?

在類中,每乙個物件有自己的const,在每個物件裡const變數的值是常量。根據這個規定,const成員變數的宣告在類內,但是初始化必須在建構函式裡。為什麼呢?理由也很簡單,const成員變數雖然是常量,但是每乙個物件的const變數值可以是不同的,於是放在建構函式中初始化也是為了保證每個物件可以自由個const變數初始化。定義如下:

class b//在建構函式中,冒號和函式體之間的部分即為初始化列表,初始化順序是按照類裡宣告的順序

};

有乙個例外尤其注意: static const 型別的變數如果是char、int\、long、short,則可以在類的定義體中進行初始化的,static const變數是整個類中都恆定的常量,與const static相同(const int * a 與int const * a 表達的意思也相同),否則也需要在類外初始化,初始化時static修飾符不能加,需要加const.

const成員 和 static成員

1.const成員變數 2.const成員函式 3.static成員變數 4.static成員函式 純手敲,給自己加深印象 1.const成員變數 必須在建構函式初始值列表進行初始化,或者申明const成員變數為static,可在類內初始化 class account void show priva...

const物件與const成員函式

const物件只能呼叫const成員函式 includeusing namespace std class a public void fun const cout const 成員函式 但是如果把第以1個fun注釋掉就會出錯 error c2662 a fun 不能將 this 指標從 const...

static與const的作用

static關鍵字的作用 1 在類中的乙個成員變數是static時,該變數被所有該類的例項物件所共同擁有,它的改變對該類的例項物件是可見的,也就是說它不屬於某個特定的物件,而是屬於這個類 2 類中的靜態成員函式不屬於某個物件,而是屬於整個類,不接受this指標,只能訪問static成員變數。3 在乙...