枚举类的基础类型别名为整型类型(编译错误)



我用GCC 7.2.0编译这个:

typedef float Signal_t;
enum class Signal_level : Signal_t {
  low = -1.0, neutral = 0.0, high = 1.0
};

编译器响应为:

error: underlying type ‘Signal_t {aka float}’ of ‘Signal_level’ must be an integral type                                                                                             

这种行为是由标准(-std=c++17(决定的还是GCC特有的?我希望 GCC 将Signal_t识别为一个整体类型。

根据 [dcl.enum]p2:

枚举基的类型说明符序列应命名一个整数类型;任何 cv 限定符都将被忽略。

这里的类型说明符 seq 指的是 : 之后的部分。

什么是积分类型([basic.types]p7(:

布尔、字符、char16_t、char32_t、wchar_t以及有符号和无符号整数类型统称为整型类型。47 整型的同义词是整数型。

因此,

浮点数不是整型类型的一部分,因此在枚举中用作基数是无效的。

相关内容

  • 没有找到相关文章

最新更新