是否可以投射“按操作员分配”操作?

时间:2016-05-03 13:15:01

标签: c casting assignment-operator

例如:

int a = 10;
float b 1.5;
a*=b; //"warning C4244: '*=' : conversion from 'float' to 'int', possible loss of data"

我想压制这个警告。当然,为什么要这样做是:

a = (int)(a*b);

所以实际上我有两个问题:

  1. 有没有办法继续使用运营商和 把它扔在两者之间?
  2. 有没有办法可以使用强制转换来抑制警告?

1 个答案:

答案 0 :(得分:1)

  

有没有办法继续使用运算符赋值并在其间插入?

没有。 R a *= b上的任何内容都会影响b,而不会影响产品a*b

  

有没有办法可以使用强制转换来抑制警告?

使用最近的整数函数来处理转换。下面的2个函数舍入到最近而不是截断,如some_int = some_float

#include <math.h>

// long int lrintf(float x); 
// round their argument to the nearest integer value
// rounding according to the current rounding direction.
int a = 10;
float b = 1.5;
a = lrintf(a * b);

// or

// long int lroundf(float x);
// The lround and llround functions round their argument to the nearest integer value, 
// rounding halfway cases away from zero, regardless of the current rounding direction.