天天看點

溫故而知新-const應用

class專屬常量的聲明和定義有兩種方式:

[b]一種是in-class initialization 方式[/b],這種方式隻适用于: (三者同時滿足)

[list]

[*]1.新式編譯器

[*] 2.integral type(ints, chars, bools)(floats, doubles有些例外,它支援這種方式,但要求類外部一定要有定義式)

[*] 3.static const

[/list]這種定義方式隻需要在類定義段中提供聲明即可。 static const int maxSize = 10;

如果要取此成員的位址,需要在類定義外加上這個變量的定義式: const int maxSize; (sizeof不包括在内,也就是即使計算這個成員的sizeof也一樣能不需要寫定義式)

目前的Gun編譯器支援這種方式的定義

[b]一種是非in-class initialization方式[/b]:

它适用于其他的類内的static const類型的定義.

定義方式: 在類定義内聲明: static const string title;

然後在類外定義: const string title = "using const";

enum hack可以解決const 無法解決的一些問題,比如在類中聲明數組,而數組的長度需要用const常量來表示,而編譯器正好不支援in-class initialization定義方式,這時需要使用enum hack。enum{maxSize = 10}。 初始化的值必須是integer類型(不包括float, double),而且使用sizeof(maxSize)測試名字長度,有結果,而且總是4(eclipse3.3中驗證通過)

對于const或者非const對象都可以調用const 成員函數,而非const成員函數則隻能對非const對象調用。

[color=red]問: 如何定義const 類型的類内成員變量?(注意:非static的,雖然這種要求很荒謬)[/color]