c++11 強類型枚舉 enum class


在標准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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM