zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/moodlxs/p/10174533.html
Copyright © 2011-2022 走看看