C 靜態 常量

2021-08-02 05:18:39 字數 1519 閱讀 3228

1)靜態成員變數

c++靜態成員變數是用static修飾的成員變數,不屬於物件的一部分,而是類一部分,因此可以在沒有例項化任何物件的時候使用靜態成員變數。但是

必須初始化它

。由於靜態變數只能被初始化一次

,所以初始化成員變數不要放在如下地方:1.類中函式之中(函式可被多次呼叫);2.類外函式之中;3.標頭檔案中(標頭檔案可能被包含入多個地方,也可能被執行多次)。

所以靜態成員變數應該放在定義檔案(如*.cpp)中函式之外的地方。

**示例:

由於靜態變數只能被初始化一次

,所以初始化成員變數不要放在如下地方:1.類的建構函式(建構函式可能多次被呼叫);2.標頭檔案中(標頭檔案可能被包含入多個地方,也可能被執行多次)。應該放在應用程式中,類以外的任何地方初始化

#include 

using namespace std;

class a ;

class b ;

a b::a =  a(); // 必須在標頭檔案之外,在類外函式之外的地方初始化。

2)類成員常量

類的成員常量,就是在類的普通成員變數前面加上const進行修飾後變成了常量。

類成員常量的初始化:需要在建構函式的成員初始化列表中進行初始化。不能在其他地方。

在建構函式中可以通過傳參形式進行初始化,所以這個常量並不一定在所有的類物件中是統一的常量。

注意:在visual studio新增類檔案的時候,常量的定義和賦值須在建構函式中進行,如果在.h檔案中定義常量,需要通過成員初始化列表進行初始化。

如**:

class a

//data1在不同物件中可以通過構造傳參實現不一致的常量。data2則在所以不同物件中一致。

const int data1;

const int data2; }

------------------------------

在vs2010以後的版本(vs2010不支援)支援.h檔案中變數的初始化功能,以及靜態常量的初始化:

有這種型別,他可以以靜態變數的定義方式進行定義,雖是成員常量但不需要以成員初始化列表的方式初始化。因為它不是

普通的成員常量(這句是自圓其說)。  :)

**如下:

#include

using namespace std;

class aa

;const double aa::dd = 3.14;  // 這樣定義就可以。

會有靜態變數和常量的優點,並且支援任何型別。

int main()

在進一步驗證,發現編譯器還支援如下初始化方式:

這不公違背了常量的初始化方式,也違背了靜態變數的初始化方式。

#include

using namespace std;

class aa ;

int main()

C 靜態常量和動態常量的區別

c 擁有兩種不同的常量 靜態常量 compile time constants 和動態常量 runtime constants 它們有不同的特性,錯誤的使用不僅會損失效率,還可能造成錯誤。相比之下,靜態常量在速度上會稍稍快一些,但是靈活性卻比動態常量差很多。靜態常量 隱式是靜態的 public co...

C 之常量與靜態成員

1 宣告pi,半徑,計算周長和面積 其中pi宣告為常量 namespace 常量 a pi 9 報錯 double b pi r r console.writeline 面積 b console.readkey 2 宣告person類,定義靜態常量總人口,定義字段年齡,呼叫方法 人口匯報 宣告dog...

靜態區 常量池

靜態區 靜態變數 又叫類變數,有static修飾 和靜態方法存放在靜態區 使用某乙個類的時候,需要將該類的位元組碼檔案載入到元空間 在載入的過程中,會先檢查類中有沒有static修飾的成員 如果有,就會優先將static修飾的成員載入到靜態區。建立類的物件之後,物件存放在堆中,物件的變數名存放在棧中...