繁体   English   中英

将基础类型的任意值强制转换为强类型枚举类型是否安全?

[英]Is it safe to cast arbitrary values of the underlying type to a strongly-typed enum type?

如果我有一个强类型的枚举,比如底层类型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);
}

来自n3290,5.2.9 Static cast [expr.static.cast]:

10可以将整数或枚举类型的值显式转换为枚举类型。 如果原始值在枚举值(7.2)的范围内,则该值不变。 否则,结果值未指定(可能不在该范围内)。 [...]

枚举类型包括使用enum声明的那些类型和使用enum classenum struct声明的类型,标准分别调用未编组的枚举和作用域枚举。 在7.2枚举声明[dcl.enum]中有更详细的描述。

枚举类型的不会与其枚举器混淆。 在你的情况下,由于枚举你宣布都有int作为它们的基础类型的值的范围是相同的int :从INT_MININT_MAX (含)。

由于42具有int类型,并且显然是int的值,因此定义了行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM