9

次の驚くべき行に遭遇しました。

int x = 7;
x += 0.5;

明らかに合法的な構文です!加算後、x はまだ 7 であるため、double は int にキャストされ、0 に切り捨てられますが、これはコードで明示的なキャストなしで行われます。他の誰かがこれに驚いていますか?ここでの根拠は何ですか?

私の質問を明確にするために編集してください:誰かがこの決定に正当な理由を与えることができますか? 他のすべての場所で明示的なキャストを要求するのはひどい決定だと思いますが、言語でこの 1 つの場所を黙ってデータを破棄する必要があります。何か不足していますか?

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 に答える