帶着這個問題,咱們來做一個實驗。
class test
{
public:
enum type{One,Two, Three};
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
cout << sizeof(test)<<endl;
return 0;
}
輸出:
想想其實也很容易明白,此時就是在類的內部聲明了一個枚舉類型。並沒有聲明這個枚舉類型的變量。此時如果加上一個枚舉類型的變量的聲明,再來測試一下這個類的大小。其中枚舉為公有的,我們試着用 類::enum值 調用該枚舉值,看其是否能夠被調用。
class test
{
public:
enum type{One=2,Two, Three};
test():t(One)
{
}
type getT()
{
return t;
}
private:
type t;
};
int _tmain(int argc, _TCHAR* argv[])
{
test s;
cout << sizeof(test)<<endl;
cout<<s.getT()<<endl;
cout << test::Three<<endl;
return 0;
}
輸出:
此時類的大小是一個int型變量的大小。取得的枚舉是一個整形。可以通過類域訪問到枚舉值。為什么通過
類::enum值可以訪問枚舉值?
因為該枚舉是一個常量,在編譯的時候已經被放入了常量區。調用的時候因此不需要該枚舉的變量也可以調用。
注意:枚舉類型不具備名字空間的作用。在一個作用域中在,如果兩個枚舉類型的值相同,則會編譯出錯。
struct CEType
{
enum EType1 { e1, e2 };
enum EType2 { e1, e2 };
};
e1,e2名字相同程序會報錯。
