由于 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/