有没有人知道我可以用来在代码中找到显式C风格的演员表的工具?我正在重构一些C++代码,并希望尽可能替换C风格的转换.
示例C风格的演员将是:
Foo foo = (Foo) bar;
Run Code Online (Sandbox Code Playgroud)
相比之下,C++样式转换的例子是:
Foo foo = static_cast<Foo>(bar);
Foo foo = reinterpret_cast<Foo>(bar);
Foo foo = const_cast<Foo>(bar);
Run Code Online (Sandbox Code Playgroud)
jon*_*ner 33
如果你正在使用gcc/g ++,只需为C风格的强制转换启用警告:
g++ -Wold-style-cast ...
Run Code Online (Sandbox Code Playgroud)
小智 8
这种演员阵容难以搜寻的事实是首先引入新式演员阵容的原因之一.如果你的代码工作正常,这似乎是一个毫无意义的重构 - 每当我修改周围的代码时,我只需将它们改为新式的转换.
话虽如此,你在C++代码中使用C风格的强制转换这一事实表明代码有问题应该修复 - 我不会做全局替换,即使这是可能的.
所述卸载C++编译器支持的选项作为一个编译时间错误报告所有这样类型转换,以及这种类型转换的语义限制用的static_cast更安全的等效性.
相关选项包括:
-cp_nocstylecasts
Run Code Online (Sandbox Code Playgroud)
编译器将在所有C样式转换上发出错误.C++代码中的C风格转换可能是不安全的,并导致不期望的或未定义的行为(例如,将指针转换为不相关的struct/class类型).此选项对于重构以查找所有这些强制转换并将其替换为更安全的C++强制转换(如static_cast)非常有用.
-cp_c2staticcasts
Run Code Online (Sandbox Code Playgroud)
编译器将C++ static_cast的更受限制的语义应用于C样式转换.打开此选项编译代码可确保C样式转换至少与C++ static_casts一样安全
如果现有代码具有大量C样式转换并且将每个转换重构为C++转换,则此选项很有用.