您是否应该使用显式类型转换更正有关类型转换的编译器警告?

bas*_*ibe 2 c c++ type-conversion compiler-warnings

在我当前的项目中,编译器显示了数百个关于类型转换的警告.

有很多像这样的代码

iVar = fVar1*fVar2/fVar3;
// or even
iVar = fVar1*fVar2/fVar3+.5f;
Run Code Online (Sandbox Code Playgroud)

故意将float值分配给int.

当然,我可以使用修复这些警告

iVar = (int)(...);
Run Code Online (Sandbox Code Playgroud)

但那看起来很丑陋.

你宁愿生活在丑陋中还是与警告一起生活?
还是有一个干净的解决方案?

nos*_*nos 12

有数百个不是问题的警告是危险的,有一天警告会出现真正的问题,并且会在噪音中淹没.

保持代码免受警告.

如果您知道自己在做什么,请添加演员表或转换.


Ala*_*irG 10

是.

您应该始终修复编译器警告.几个原因:

*)它可能是错误的原因,需要一个实际的修复,而不仅仅是一个演员.直到你看,你才会知道.

*)显示为警告的实际编码错误可能会丢失数百个警告产生的噪音

*)它向其他编码员明确表示你真的有意在那里使用错误类型/符号的变量.这是故意的.

*)它清楚明确地表明类型和/或签名正在改变.如果您的变量名称不包含类型和签名的指示,则可能不会发生这种情况.

  • "需要一个实际的修复,而不仅仅是一个演员":实际情况往往是如此.编译最大警告,并将警告变为错误. (2认同)
  • 实际上,我在发现这些警告时已经发现了不少错误. (2认同)

Ebo*_*ike 5

我编译"警告被视为错误".警告通常指示您编写的代码不会按照您的预期方式运行.

在这种情况下,演员表明你正在改变类型,这意味着精度的变化(以及性能影响,如果你碰巧处理极其时间关键的代码).编写以最明显的方式显示其所有显式和隐式结果的代码始终是一个很好的策略,这样您几个月后就可以了解代码的作用 - 或者如果团队成员必须使用它.