【发布时间】:2014-07-07 12:19:25
【问题描述】:
有一些函数将枚举作为参数
void myfunc(myEnum input);
据我所知,如果我必须给这个函数一个整数,建议将它显式转换为枚举,原因是所有整数可能不是有效的枚举值。
根据MSDN
"static_cast 运算符可以显式地将整数值转换为 枚举类型。如果整型的值不落 在枚举值范围内,生成的枚举 值未定义。”
并根据 C++ 标准 5.2.9 静态转换 -> 10
"整数或枚举类型的值可以显式转换 为枚举类型。如果原始值不变,则该值不变 在枚举值(7.2)的范围内。否则,该 结果值未指定(可能不在该范围内)。”
那么在这种情况下使用static_cast 有什么意义呢?是否有一些选项会在枚举范围之外的值上引发异常(而不是为此编写显式代码)?
【问题讨论】:
-
强制转换的原因是因为语言需要它 - 与 C 不同,没有从整数到枚举类型的隐式转换。或者你是在问为什么语言是这样设计的?
-
@Mike Seymour 是的,我想知道他们为什么没有设置检查机制? enum 到 int 是隐式可转换的,所以如果没有检查并且责任在我身上,请以相同的方式使 int 到 enum。
-
自动运行时检查是 C++ 通常避免的,让程序员可以选择是否为它们付费。要求显式转换会迫使您考虑是否需要进行检查,并让未来的读者清楚地知道正在发生一些不寻常的事情。允许隐式转换会默默隐藏潜在的错误。
标签: c++ casting enums static-cast