——傳統的枚舉存在一些問題,其中之一是兩個枚舉類型定義中的枚舉量可能發生衝突。安全
enum egg {Small, Medium, Large, Jumbo}; enum t_shirt {Small, Medium, Large, Xlarge};
這將沒法經過編譯(egg Small和t_shirt Small發生衝突)blog
C++11提供了一種新枚舉,其枚舉量的做用域爲類:ci
enum class egg {Small, Medium, Large, Jumbo}; eum class t_shirt {Small, Medium, Large, Xlarge};
egg choice = egg::Large; // the Large enumerator of the egg enum t_shirt Floyd = t_shirt::Large; // the Large enumerator of the t_shirt enum
enum egg_old {Small, Medium, Large, Jumbo}; // unscoped enum class t_shirt {Small, Medium, Large, Xlarge}; // scoped egg_old one = Medium; // unscoped t_shirt rolf = t_shirt::Large; // scoped int king = one; // implicit type conversion ofr unscoped int ring = rolf; // not allowed, no implicit type conversion if (king < Jumbo) // allowed std::cout<<"Jumbo converted to int before comparison.\n"; if (king < t_shirt::Medium) // not allowed std::cout<<"Not allowed: < not defined for scoped enum.\n";
但在必要時,可顯示類型轉換:作用域
int Frodo = int(t_shirt::Small); // Frodo set to 0