转换为复合赋值运算符?

Roe*_*oel 5 c++

我的代码,简化为本质,可以归结为:

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++ :(

Cat*_*lus 3

除乘以 2,而不是乘以 0.5。如果是 2,int则将使用整数除法,并且不会出现警告。

如果您确实想乘以浮点数/双精度数,则不要使用它int来存储结果。

  • @Roel:猜测OP这次可能有的每一个愚蠢的限制也很累人。在帖子中包含所有相关信息。如果你真的想使用“int”,显式转换是唯一的选择。 (2认同)