3 回答

TA貢獻1864條經(jīng)驗 獲得超2個贊
(1.)為什么C ++中不允許這樣做?
來自Bjarne Stroustrup的C ++風格和技巧常見問題解答:
類通常在頭文件中聲明,并且頭文件通常包含在許多翻譯單元中。但是,為避免復雜的鏈接器規(guī)則,C ++要求每個對象都有唯一的定義。如果C ++允許將需要作為對象存儲在內(nèi)存中的實體的類內(nèi)定義,則該規(guī)則將被破壞。
(2.)為什么允許const成員初始化?
[ dirkgently說它更好 ]
(3.)這是否意味著C ++中的靜態(tài)變量沒有像C一樣用0初始化?
據(jù)我所知,只要你在.cpp中聲明靜態(tài)成員var,如果你沒有另外指定,它將被零初始化:
// in some .cppint Test::j; // j = int();

TA貢獻1877條經(jīng)驗 獲得超6個贊
為什么在C ++中不允許這樣做?
除非您定義它,否則該變量不會成為l值。
為什么允許const成員初始化?
即使在這種情況下,如果要獲取變量的地址,也需要定義。
9.4.2靜態(tài)數(shù)據(jù)成員
2在類定義中聲明靜態(tài)數(shù)據(jù)成員不是定義,除了cv-qualified void之外,它可能是不完整的類型。靜態(tài)數(shù)據(jù)成員的定義應出現(xiàn)在包含成員類定義的命名空間范圍內(nèi)。在命名空間作用域的定義中,靜態(tài)數(shù)據(jù)成員的名稱應使用::運算符通過其類名限定。靜態(tài)數(shù)據(jù)成員定義中的初始化表達式在其類的范圍內(nèi)
此外,這主要是一個使用工件,所以你可以寫:
class S { static const int size = 42; float array[ size ];};
這是否意味著C ++中的靜態(tài)變量沒有像C一樣用0初始化?
不,是他們:
3.6.2非局部變量的初始化
在進行任何其他初始化之前,具有靜態(tài)存儲持續(xù)時間(3.7.1)或線程存儲持續(xù)時間(3.7.2)的變量應為零初始化(8.5)。
雖然事情在C ++ 0x中變得更加棘手。現(xiàn)在可以初始化所有文字類型(而不是當前標準中的整數(shù)類型),這意味著現(xiàn)在可以使用聲明中的初始化程序初始化所有標量類型(包括浮點數(shù))和某些類類型。
- 3 回答
- 0 關(guān)注
- 674 瀏覽
添加回答
舉報