Объяснение очень простое: =
является ассоциативным справа налево, что означает, что x = y = 7.5;
оценивается как x = (y = 7.5);
, следовательно, по существу, такое же как:
y = 7.5; // value is converted from double to float, y receives 7.5F
x = y; // value of y is converted from float to int, x receives 7 (truncated toward 0)
, тогда как y = x = 7.5;
оцениваетсяas y = (x = 7.5);
:
x = 7.5; // 7.5 is converted to int, x receives value 7 (truncated toward 0)
y = x; // value of x is converted to float, y receives 7.0F
Эти неявные преобразования могут быть противоречивыми.Возможно, вы захотите повысить уровень предупреждения, чтобы компилятор предупреждал вас о потенциальных ошибках и нежелательных побочных эффектах.