c++ - 将 C 风格的转换更改为 static_cast 总是安全的吗?

标签 c++ static-cast

由于 cppcheck cstyleCast 样式警告,我正在尝试消除代码库中的所有 C 样式转换。

将 C 风格的转换更改为 static_cast 总是安全的吗?

安全,我的意思是,是否存在旧的 C 风格转换可以正常工作,但 static_cast 会引发错误或未定义行为的情况?

type1 a;
type2 b = (type2)a;               // C style cast
type2 b = static_cast<type2>(a);  // Is this always a valid replacement for above cast?

最佳答案

C 风格的转换通常是 static_cast<> 的组合或 reinterpret_cast<>const_cast<> .仅用 static_cast<> 替换它可能会出现编译时错误.

我不知道有任何运行时错误的情况。

您可以从 static_cast<> 开始, 然后添加(或替换为)const_cast<>出现编译时错误的地方。如果在那之后你仍然有编译时错误,reinterpret_cast<>是必要的。但不要盲目地进行替换——其中一些情况可能是错误。例如,reinterpret_cast<>如果数据类型是前向声明但未定义的,则可能需要,这会导致未指定的行为(如果涉及多重继承,肯定会导致问题)。

发现这些类型的错误是此练习提高源代码安全性的原因,也是静态代码分析器标记 C 样式转换的原因。

关于c++ - 将 C 风格的转换更改为 static_cast 总是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899581/

相关文章:

c++ - 使用多态时如何避免向下转换?

c++ - 将 Derived*const 转换为 Base*const

c++ - 运算符重载的基本规则和惯用法是什么?

c++ - Float 或 Double 特殊值

c++ - 为什么我从 RegisterClassEx 收到错误代码 87(无效参数)?

c++ - 派生类返回分配的基类实例

c++ - 在每个实例的唯一虚拟 int type() 中使用静态转换来提高性能是否安全?

c++ - 什么时候可以在 C++ 中安全地使用 static_cast 进行向下转换?

c++ - 为什么我不能使用继承来实现C++中的接口(interface)?

c++ - 在运行时环境中使用带Lua的C++