我用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 整型的同义词是整数型。
浮点数不是整型类型的一部分,因此在枚举中用作基数是无效的。