返回首页

搜索在C风格的显式类型转换:A =(INT)B;我有一个问题,关于这个诊断的利益。
一位用户的建议,我们实现了所有的显式类型
搜索在PVS的Studio Analyzer的C风格的转换。
也就是说,诊断,以检测这种结构:


int *x = (int *)y;

float a = float(b);

float c = (float)(d);


其目的是要取代他们的安全
所有这些转换版本 - reinterpret_cast的/的static_cast / const_cast会。在这个过程中这样的重构,代码中的一些缺陷可以被检测出来。
当然,这不是关键错误的检测,如果我们
实施这一诊断,这将是在一节[客户
具体要求],默认为禁用。

但我什至怀疑这个诊断的利益。所以我决定问
其他用户:任何人都需要这种明确的
搜索选项C风格的类型转换?会有人要执行这种
在他们的代码重构?

回答

评论会员:游客 时间:2012/02/06
。这可能是有用的,其实这些"危险"地区代码我的意思是,修改的C-像演员始终是一个很好的做法,在我看来:理查德MacCutchan
我与卡罗同意,你一定要做到这一点,如果你正在从C到C。旧的C风格的演员,很容易引起不明原因的错误,这可能是很难发现运行的应用程序
评论会员:游客 时间:2012/02/06
ç演员有时的static_cast(相关类型),有时reinterpret_cast的(无关的类型)如果你能正确地猜测它们是什么,逐案,更换适当的类型转换与C的代码更健壮。是的唯一的危险,我看到这里你可以不猜1一定的方式,其中投你应该使用(它与(发生的A*)b,其中b是1乙实例和A和B两个模板参数。什么的Ç投不取决于A和B实际上是实例,不是很明显,如果A和B的static_cast工程"作为相关类型reinterpret_cast的情况下,AB公司是无关的,必须作为错误处理。较弱的C演员的行为,换句话说,在一些旧的代码,5月已自觉地作为一个"功能"(没有错误):在这种情况下,删除它,可能会改变正确的行为(在计算理论意义)代码。当然,C社区会批评这样的代码,但如果它存在并证明了它的工作原理...你可以做更多的工作
!Stefan_Lang:这使得我们三{S0的}

问题是,声明的变量(或表达式)演员可以在其他地方的codebase,如果该宣言的不断变化,剧组将默默地损坏。 "宣言",甚至可能是在另一个库,因此,交换库默默可能打破你的代码。
我看到这种情况发生,必须寻找和解决此类案件。
不过,我不知道,如果这样的任务可以自动为用户定义类型以及演员。当然,对于转换到一个特定的类型,但你是怎么处理这种类型的数百或数千的遗留应用程序?虽然只有其中的一些可能实际上被用于类型转换,你如何能找到它吗?也许可以帮助一个grep的一个聪明的搜索模式(和一些方法来删除重复):安德烈・卡尔波夫
评论会员:游客 时间:2012/02/06
感谢大家。我认为我们实现这一点