如果我有一个强类型的枚举,比如底层类型int
,是否可以将一个int
与枚举类型不匹配的值转换为枚举类型?
enum e1 : int { x = 0, y = 1 };
enum class e2 : int { x = 0, y = 1 };
int main() {
e1 foo = static_cast<e1>(42); // is this UB?
e2 bar = static_cast<e2>(42);
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*ton 16
来自n3290,5.2.9 Static cast [expr.static.cast]:
10可以将整数或枚举类型的值显式转换为枚举类型.如果原始值在枚举值(7.2)的范围内,则该值不变.否则,结果值未指定(可能不在该范围内).[...]
枚举类型包括声明的那些类型enum
和用enum class
或声明的类型,enum struct
标准分别调用未编组的枚举和范围枚举.在7.2枚举声明[dcl.enum]中有更详细的描述.
枚举类型的值不会与其枚举器混淆.在你的情况下,由于枚举你声明都有int
其基础类型的值的范围是一样的,即int
:从INT_MIN
到INT_MAX
(含).
由于42
具有类型int
并且显然int
是定义了行为的值.