复合赋值运算符是否不如 c++ 精确?

Are compound assignment operators less precise than in c++?

根据此线程 Why don't Java's +=, -=, *=, /= compound assignment operators require casting?,i+=j 比 i=i+j 更安全,但 不够精确由于类型转换,在 JAVA 中。

在 C++ 的情况下也是如此吗?

编辑:

假设:int i; long j; i.e.the 变量具有不同的数据类型

在 C++ 中,如果两个操作数 i, j 的类型相同,则不会进行任何转换。

如果它们不同,则较低范围(例如 int)被提升到较高范围(例如 longfloatdouble

这个提升,从下往上,大部分时候都不会失准。但是一些 int-to-float 转换可能会丢失一些数字。

i+=ji=i+j没有区别。

在某些情况下,您必须注意丢失精度。例如:

int i = 2;
double d= 4.8;
i += d;

因为 d 的范围比 i 高,所以操作是用双精度进行的:2+4.8 = 6.8 但是在将其存储回 i 时,结果被截断了,因此 i=6

对于 int ilong j 的情况,操作 (i+j) 以 long 的精度完成,但如果 j 不适合 int.