枚举类:语法细节:类型和通用性

时间:2018-03-01 14:53:53

标签: c++11

以下C ++ 11代码是什么意思?

    enum class myclass_t : int 
    {
       one_element= 1, second_element = 2
    };

首先:为什么有int?它显然是指1和2的类型,但我们是否需要它,如果是这样,为什么呢? 第二:正常类,枚举类和普通枚举之间的区别是什么。我已经查了一下,但并没有真正得到它 感谢。

1 个答案:

答案 0 :(得分:1)

  

为什么有int?它显然是指1和2的类型,但我们是否需要它,如果是这样,为什么呢?

你不需要这样做,但是现在你可以在C ++ 11中指定底层类型,你可以获得type safety的好处。如果您的表达式超出该类型的范围,它将警告您,而不是编译器更改基础类型。想象一下,如果它是如下所示。

enum class myclass_t : short 
{
   first_element = 1,
   second_element = 2,
   third_element = 65536
};

现在,当您尝试编译此代码时,编译器会提示您已超出有效范围。

error: enumerator value 65536 is outside the range of underlying type 'short int'
third_element = 65536
                ^

不可否认,将您的枚举类定义为int没有太大价值,因为默认情况下它是该类型,但在您可以使用时,实现类型安全在很大程度上被视为良好做法。及早发现错误总是一件好事。

  

普通class enum class和普通enum之间有什么区别?

这个问题是answered here