为什么每个常量表达式都可以转换为枚举类型

时间:2014-05-18 16:29:42

标签: c++ enums implicit-conversion

当我们定义枚举(作用域或未作用域)时,任何枚举器都具有其枚举类型。例如,请考虑以下事项:

enum E { z=5 } //This unscoped enumerator has underlying type int implcitly

因此const int可以投射到E。有标准转换吗?

1 个答案:

答案 0 :(得分:2)

  

是否有标准转换?

该标准在§4.5/ 3中规定:

  

未编组的枚举类型的prvalue,其基础类型不是   fixed(7.2)可以转换为第一个的prvalue   以下类型可以表示枚举的所有值   (即7.2中描述的bmin到bmax范围内的值):int,   unsigned int,long int,unsigned long int,long long int或unsigned   long long int。如果该列表中的所有类型都不能代表所有类型   枚举的值,无范围枚举类型的prvalue   可以转换为具有最低值的扩展整数类型的prvalue   整数转换等级(4.13)大于长长的等级   其中可以表示枚举的所有值。如果有   是两种这样的扩展类型,选择签名的类型。

(强调我的)

第§7.2/ 10节还规定了枚举器类型可以通过整数提升转换为整数,但不是相反:

enum color { red, yellow, green=20, blue };
color c = 1; // error: type mismatch
int i = yellow; // OK: yellow converted to integral value 1

(标准中的例子)

注意:所有引号均来自N3936 draft