1. 程式人生 > >c++11 強類型枚舉 enum class

c++11 強類型枚舉 enum class

整數 枚舉類 name 相同 space ios enum 大小 include

在標準C++中,枚舉類型不是類型安全的。枚舉類型被視為整數,這使得兩種不同的枚舉類型之間可以進行比較。C++03 唯一提供的安全機制是一個整數或一個枚舉型值不能隱式轉換到另一個枚舉別型。 此外,枚舉所使用整數類型及其大小都由實現方法定義,皆無法明確指定。 最後,枚舉的名稱全數暴露於一般範圍中,因此C++03兩個不同的枚舉,不可以有相同的枚舉名。
(好比 enum Side{ Right, Left }; 和 enum Thing{ Wrong, Right }; 不能一起使用。)

C++11 引進了一種特別的 "枚舉類",可以避免上述的問題。使用 enum class 的語法來聲明:
enum class Enumeration{ Val1, Val2, Val3 = 100, Val4 /* = 101 */,};

此種枚舉為類型安全的。枚舉類型不能隱式地轉換為整數;也無法與整數數值做比較。 (表示式 Enumeration::Val4 == 101 會觸發編譯期錯誤)。

#include <iostream>
using namespace std;

enum class Enumeration1
{
    Val1, // 0
    Val2, // 1
    Val3 = 100,
    Val4 /* = 101 */
};

// 指定類型
enum class Enumeration2:long {val1,val2=100,val3}; // val2=100.000400 出錯

int
main(int argc, char** argv) { Enumeration1 my=Enumeration1::Val3; cout<<static_cast<int>(my)<<endl; cout<<static_cast<double>(Enumeration2::val2)<<endl; return 0; }

c++11 強類型枚舉 enum class