9

我遇到了以下令人惊讶的行:

int x = 7;
x += 0.5;

显然是合法的语法!添加之后,x 仍然是 7,所以 double 被强制转换为 int 并向下舍入为 0,但这是在代码中没有任何显式强制转换的情况下完成的。其他人对此感到惊讶吗?这里的理由是什么?

编辑以澄清我的问题:任何人都可以给出这个决定的充分理由吗?要求在其他任何地方进行显式强制转换,这让我觉得这是一个糟糕的决定,但是在语言中有一个地方可以让你默默地丢弃数据。我错过了什么吗?

4

3 回答 3

14
x += 0.5;

相当于:

x = (int) (x + 0.5)

一般来说:

x += y相当于x = (type of x) (x + y)


15.26.2。复合赋值运算符

于 2013-03-31T18:55:15.570 回答
0

x += 0.5;是一样的x = (int) (x + 0.5);

于 2013-03-31T18:55:04.007 回答
0

这是因为复合赋值运算符进行了隐式转换(自动转换):所以

x+=0.5 => x =(int)(x + 0.5) => x = (int)(7.5) => x = 7
于 2013-03-31T18:56:20.250 回答