编号 | CON#006 |
标题 | 如果可能,优先使用static_cast而非reinterpret_cast |
语言 | C++ |
级别 | 4 |
类别 | 转换 |
规范说明
static_cast是一种从一个类型到另一个类型的转换,其中存在已知的转换方法。例如,您可以将int静态转换为char,因为这样的转换是有意义的。然而,您不能将int静态转换为double,因为只有当int以某种方式被混淆以指向double时,这种转换才有意义。
reinterpret_cast是一种表示可能将一个值的位重新解释为另一个值的位的不安全转换。例如,使用reinterpret_cast将int转换为double是合法的,尽管结果是未指定的。同样,使用reinterpret_cast将int转换为void*也是完全合法的,尽管这样做是不安全的。
无论是static_cast还是reinterpret_cast,都不能从某个东西中移除const。您不能使用这两种转换中的任何一种将const int转换为int。为此,您将使用const_cast。
通常,对于应该安全的转换,您应该始终优先使用static_cast。如果您意外地尝试执行未明确定义的转换,编译器将报告错误。只有当您真正要更改机器中某些位的解释时,才应使用reinterpret_cast。
文献参考:StackOverflow Q6855686