2011-04-23 75 views
1

ios_base類中的靜態常量在創建時被初始化,這對常量有意義。非常量靜態成員變量是否可以用同樣的方式初始化,或者這個概念只允許常量靜態成員?ios_base和靜態成員

對於具有gnu編譯器的非常量靜態成員,必須始終在頭中分別定義/分配空間與其減速度分開嗎?以這種方式初始化常量靜態成員是否合適?

+0

+1爲冷靜的名字。爲了簡單回答這個問題,定義/分配總是需要的,但是如果你省略了整數的定義(例如'int','short','long','enum'等等),編譯器會自動爲你做這些事情。不變。 – Potatoswatter 2011-04-23 06:37:58

回答

3

只有當前C++標準中的static const(積分數據類型,如int, char, double等)成員才能創建和初始化類成員。對於非靜態成員是不可能的。但是,在C++ 0x中引入了該工具。

編輯:對於非const靜態成員,你可以做初始化,但你必須做在.cpp文件相同(非模板類)。例如

struct A 
{ 
    static const int i = 0; // ok 
    static int j; // can declare in .cpp file as below 
    int k = 2; // error, but valid in C++0x 
    const int l = 3; // error, valid in C++0x 
    static const int m[2] = {1,2}; // error, should be an integral type 
    static const string n = "hi"; // error, should be an integral type 
}; 
int A::j = 1 // declare in class body, and define outside 
+0

我的意思是,對於非常量靜態成員,你是否也可以這樣做,以及整數數據類型是什麼意思:-) – rubixibuc 2011-04-23 06:35:28

+0

我編輯了我的答案。希望能回答你的問題。 – iammilind 2011-04-23 06:44:05

+0

謝謝:-)沒有回答我的問題 – rubixibuc 2011-04-23 06:51:37

1

因爲靜態數據成員必須在 恰好一個 編譯單元明確定義。

從C++ FAQ http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12

你可能想了解「靜態數據成員」要了解清楚它的整個「構造函數」一節。 http://www.parashift.com/c++-faq-lite/ctors.html

+0

非常有用的源碼:-),但標準頭文件(如ios_base)如何定義常量靜態記憶體,但是在一個編譯單元中沒有定義? – rubixibuc 2011-04-23 06:43:53