1. 程式人生 > >C++ 關於“不允許使用資料成員初始值設定”的問題

C++ 關於“不允許使用資料成員初始值設定”的問題

這應該算是C++11新標準的一個重大的改動了!建議使用VS2015使用新標準!

C++11 之前的標準是不允許在類內初始化非靜態資料成員的,只有靜態常量整型資料成員,才可以在類中初始化。具體原因可以看下列原因(舊版):

(1)類只是一個抽象型別,並不是實體的東西,利用這個抽象型別會例項化成不同的個體,每個個體的特徵(資料成員)都不一樣,如果在類定義中將特徵初始化了,豈不是破壞了抽象性,做了一個面向都一樣的模子?

(2)類的定義實際相當與型別宣告,並沒有分配儲存空間,初始化的資料哪裡放? 類例項化以後才會有實體儲存地址及空間。


當時認為,類定義中的資料定義,是一種宣告,不是資料定義,當用類 定義物件(變數,常量)時候,才開始定義資料。

關於靜態成員:

靜態常量整型資料成員—static關鍵字:
1)不是物件的一部分

2)可以產生常量表達式,所以可以在類中初始化。

靜態常量整型資料成員,能夠用來當作常量表達式使用,不在內部定義的話,則該常量表達式未定義,就不能使用了。

C++11 非靜態成員變數(常量),可以直接初始化,或者在初始化表中初始化。
C++11 中 初始化非靜態成員變數(常量),可以看作賦給變數(常量)一個預設值。