对整型到enum的转换进行Static_cast
static_cast on integer to enum conversion
某个函数接受enum作为实参
void myfunc(myEnum input);
据我所知,如果我必须给这个函数一个整数,建议将其显式转换为enum,原因是所有整数可能都不是有效的enum值。
根据MSDN
" static_cast操作符可以显式地将整型值转换为枚举类型。如果整型的值不下降在枚举值范围内,生成的枚举值未定义。"
和c++标准5.2.9静态强制转换-> 10
"整型或枚举类型的值可以显式转换到枚举类型。如果为原值,则该值不变在枚举值(7.2)的范围内。否则,结果值未指定(并且可能不在该范围内)。"
那么在这种情况下使用static_cast
有什么意义呢?是否有一些选项会在枚举范围之外的值上引发异常(而不是为此编写显式代码)?
像往常一样,编译器只是试图阻止您搬起石头砸自己的脚。这就是为什么不能将int
传递给需要枚举的函数。编译器将正确地抱怨,因为int
可能不匹配任何有效的enum
值。
如果这是如此危险,那么为什么编译器不为整数值添加一个运行时检查?原因就像c++一样,是性能问题。也许你只是从周围的程序逻辑中知道 int值总是有效的,你绝对不能把任何时间浪费在愚蠢的运行时检查上。从语言设计的角度来看,这可能不是最合理的默认选择,特别是当您的目标是编写健壮的代码时。但这就是c++的工作原理:开发人员永远不应该为他们可能不想使用的功能付费。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- C++Cast运算符过载
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- "static char __ = []() -> char"的含义
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 无法在 DLL 中链接 SDL2-static.lib
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- C++线程"Call to non-static member function without an object argument"
- 出现这种错误的原因是什么"invalid use of non-static data member "
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- static是如何使用ClassA::m_variable处理所有类对象的
- 在[expr.static.cast]/4中,术语"一个可行函数"指的是什么