我的代码,简化为本质,可以归结为:
int x = 5;
x *= 0.5;
Run Code Online (Sandbox Code Playgroud)
使用 Visual Studio 进行编译时,我收到一条关于可能丢失数据的警告 C4244 - 当然,因为(简化的)int 与 double 的乘法会产生 double,然后将其转换为 int,从而丢失非整数部分。
我的问题是,是否有 C++ 语法来表明这是预期的行为,以便使警告静音(我知道 pragma push/pop 可以禁用警告,我认为更清楚地表明这实际上是预期的行为,并且我不仅仅是压制警告)。
长形式是在乘法之后显式转换,如下所示:
x = (int)(x * 0.5);
Run Code Online (Sandbox Code Playgroud)
但复合运算符表示法更容易阅读。
那么,有没有一种方法可以这样投呢?我尝试过将“(int)”放在我能想到的每个位置,但它们似乎都不是有效的 C++ :(
除乘以 2,而不是乘以 0.5。如果是 2,int则将使用整数除法,并且不会出现警告。
如果您确实想乘以浮点数/双精度数,则不要使用它int来存储结果。