C 模板類中靜態資料成員初始化

2021-08-28 08:12:31 字數 1197 閱讀 9597

首先看**,靜態資料成員分為兩種情況,第一種不依賴模版型別引數,第二種依賴模版型別引數。

template

<

typename t>

class

testtemstatic

;

那麼如何初始化呢?

對於第一種存在兩種初始化方式:

template

<>

int testtemstatic<

int/* any other type */>::knowntypevar=

2;//具化定義,給出t型別,同時定義num,t可以是其他任意特定型別。

template

<

typename t>

int testtemstatic::knowntypevar=

50;//範化定義,定義num時不需要知道t的型別

如果你想給特定型別t的靜態成員乙個特定的值,使用第一種方式。如果你希望對任意型別t的都有乙份通用的值,請使用第二種方式。

兩種初始化可以並存,對於特定型別t如果存在具化定義,則以具化定義為準。並且對於特定型別t的具化定義不可在不同的(cpp)實現檔案中重複。

template

<

typename t>

int testtemstatic::knowntypevar=

50;template

<

typename t>

int testtemstatic::knowntypevar=

60;

範化定義可以在不同的(cpp)實現檔案重複也可以賦予不同數值, 鏈結器負責選出唯一定義。選擇哪乙個與具體的編譯順序有關。

因此,範化定義可以放在標頭檔案中,具化定義放在唯一的cpp檔案中。

對於第二中只有一種初始化方式:

template

<> float testtemstatic::unknowntypevar=4.0f;

由於unknowtypevar的定義依賴模版引數t的型別,所以定義unknowntypevar時必須給出t的型別。同樣,對於特定型別t的具化定義不可在不同的(cpp)實現檔案中重複。

C 中類的靜態成員初始化

靜態成員的初始化 與全域性物件一樣對於靜態資料成員在程式中也只能提供乙個定義,這意味著靜態資料成員的初始化不應該被放在標頭檔案中而應該放在含有類的非inline函式定義的檔案中。能在類中初始化的成員只有一種,那就是靜態常量成員。class a 結論 靜態常量資料成員可以在類內初始化 即類內宣告的同時...

C 類中靜態資料成員MAP如何初始化

在寫c 時,博主遇到對類中靜態的map進行初始化的問題,在不斷嘗試中找到了一種解決方案。如下所示 我們可以在類中寫乙個私有的靜態成員函式用於對map初始化。cguitarspec.h class guitarspec 吉他的部分屬性 static map createmcolor guitarspe...

C 靜態成員初始化

在c 類中,靜態成員一般不允許在類宣告中進行初始化,應該在類的外部進行初始化,例如 class a static int a a 0 初始化方式 void main void 但是有乙個例外,可以為靜態成員提供const 整數型別的類內初始值。要求靜態成員必須是字面值常量型別的constexpr 因...