在標準c++中,列舉型別不是型別安全的。列舉型別被視為整數,這使得兩種不同的列舉型別之間可以進行比較。
c++03 唯一提供的安全機制是乙個整數或乙個列舉型值不能隱式轉換到另乙個列舉別型。 此外,列舉所使用整數型別及其大小都由實現方法定義,皆無法明確指定。
最後,列舉的名稱全數暴露於一般範圍中,因此c++03兩個不同的列舉,不可以有相同的列舉名。
(好比
enum side
;
和
enum thing
;
不能一起使用。)
c++11 引進了一種特別的 「列舉類」,可以避免上述的問題。使用
enum class
的語法來宣告:
enum class enumeration
;
此種列舉為型別安全的。
列舉型別不能隱式地轉換為整數 ;
也無法與整數數值做比較。 (表示式enumeration::val4 == 101
會觸發編譯期錯誤)。
#include
using namespace std;
enum class enumeration1 ;
// 指定型別 !!!!!!!!!!!!!!***********!!!!!!!!!!!!!!!!!!!
enum class enumeration2:
long
;// val2=100.000400 出錯
intmain
(int argc,
char
** ar**)
C 強列舉型別
為了解決c c 中的enum型別的一系列缺點,比如 非強型別,允許隱式轉換為int型,占用儲存空間及符號性不確定。c 11引入了列舉類 又稱為 強列舉型別strong typed enum 語法格式 enum class 型別名 如 enum class people 這樣就成功的定義了乙個強型別的...
C 11 強型別列舉
c 11引入了一種新的列舉型別,即 列舉類 或 強型別列舉 宣告強型別列舉非常簡單,只需要在enum後加上class或struct即可。例如 enum old 老形式 enum class new 新形式 enum struct new2 新形式傳統的c 列舉型別有一些缺點 如果在相同作用域中的兩個...
c 基礎 列舉型別
列舉 定義一種列舉型別並且在定義這種型別時我們要指定該型別的所有值 語法 enum 型別名稱 列舉的定義一般和類定義在同一級別,這樣在同乙個命名空間下的所有類都可以使用該列舉型別 方法中和類中也可以 例項 定義乙個列舉型別 enum gender 在放方法中使用 static void main s...