只有靜態常量整型資料成員才可以在類中初始化

2021-06-21 12:54:10 字數 556 閱讀 8916

類定義中,資料成員的初始化,只有靜態的常量整形資料成員才可以在類定義中初始化,如    static const int c=2;

常整型靜態資料成員可以在類中直接初始化,而常實型靜態資料成員不可以

class circle

;b可以在類外進行初始化,且所有物件共享乙個b的值:

int circle::b = 2;

有個例外:

c++ primer》第四版401頁中說:

一般而言,類的static成員,像普通資料成員一樣,不能在類的定義體中初始化。相反,static成員通常在定義時才初始化。

這個規則的乙個例外是,只要初始化式是乙個常量表示式,整型const static 成員就可以在類的定義體中進行初始化。

但是,在vc6.0中那樣初始化是不行的,而在vc2003中卻可以.

應該算是vc6的又乙個經典bug了吧!

畢竟,目前的c++標準是在2023年制定,2023年小修改了一下,而vc++6.0是在98年發布的 ,可以原諒吧!

effective c++似乎也提到過這個問題! 

只有靜態常量整型資料成員才可以在類中初始化

c 11 之前的標準 只有靜態常量整型資料成員,才可以在類中初始化。這是因為,當時認為,類定義中的資料定義,是一種宣告,不是資料定義。當用類 定義物件 變數,常量 時候,才開始定義資料。靜態常量整型資料成員 1 不是物件的一部分 2 可以產生常量表示式,所以可以在類中初始化。否則,用它作為陣列的大小...

在類中定義不變的常量是否可以用const?

看了林博士的書才知道這麼一會事。有時我們希望某些常量只在類中有效。由於 define 定義的巨集常量是全域性的,不能 到目的,於是想當然地覺得應該用 const 修飾資料成員來實現。const 資料成員的確 存在的,但其含義卻不是我們所期望的。const 資料成員只在某個物件生存期內是常量 而對於整...

C 在類中可以訪問同類物件的私有成員

今天在實現string類的拷貝建構函式時,發現可以直接使用引數物件去訪問該類的私有成員。string const string s copy拷貝建構函式 str new char strlen s.c str size s.size capacity s.capacity private char ...