当我们定义枚举(作用域或未作用域)时,任何枚举器都具有其枚举类型。例如,请考虑以下事项:
enum E { z=5 } //This unscoped enumerator has underlying type int implcitly
因此const int
可以投射到E
。有标准转换吗?
答案 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。