如何在我的C ++源代码中查找(并替换)所有旧的C风格数据类型转换?

如何在我的源代码中找到所有旧的C风格演员?

我正在使用Visual Studio,可能有一些编译器警告,我必须启用?

GCC有选项-Wold-style-cast ,如果发现任何C -Wold-style-cast ,它会发出警告。

我不知道报告这些的编译器开关,或Visual Studio中内置的任何其他内容。

但是,这是一个Perl脚本 ,它将搜索源树并查找源中的所有C样式转换。 它可以很好地跟踪它们。

不幸的是,在Visual C ++中没有一个编译器警告指出这些演员(至少不是我所知道的),虽然它看起来像PC-Lint确实提供警告/注释,如果你使用旧式警告你投。 取决于你是否愿意花钱购买PC-Lint – 在我看来,它绝对值得你能找到的所有问题……

你为什么需要那个? 你想摆脱所有这些吗?

基本类型(double)(double) C风格转换是安全的,看起来比static_cast()好得多。 我个人更喜欢这种风格。

在多态类的情况下,C风格的演员表的问题被夸大了。 仅当您使用多重inheritance并且必须进行交叉转换时,它可能是一个问题。 默认情况下,C风格的强制转换在那里不起作用。 但在大多数情况下()工作方式与static_cast<>()完全相同,我不会浪费时间来替换它们。 无论如何,对于多态类型,我在编写新代码或更改某些内容时使用C ++样式转换。

更新:

伙计们,我似乎不太清楚地表达了我的意见。 是的,我知道这个理论:C ++ – 演员是好的,C演员是邪恶的。 需要此规则(以及大多数其他规则)来保存C ++中的新手。 但这并不意味着你总是需要遵循它。

我的观点是C风格的演员表并不那么可怕。 如果你写一些像

 int convertFooToBar(double i_foo) 

,没有理由在实现中使用C ++风格的强制转换。 它们并不比(int)更安全,但看起来很混乱。 在这种情况下,施放并不棘手。 在演员阵容中没有任何不好或棘手:有时演员阵容很自然。

关于搜索:我不记得我在过去10年中搜索任何演员陈述,尽管我每天都在维护数百万行遗留C ++代码。 我甚至不记得由于错误的铸造造成的任何严重问题。

最初的问题是关于替换已经写过的C风格的演员阵容。 所以,我的答案是:

是的,C ++风格的演员表比C风格演员表更好更安全。 但这并不意味着您需要在代码中搜索旧代码并尝试去掉所有代码。 实际上,这不是一个真正的问题。 只是不要浪费你的时间。 您可以将其用于搜索和删除一些过时的代码。 它对您的代码库更有用。