Почему это различие в поведении компиляции?
Обычно люди не ожидают переполнения переменной при написании кода.Лучше всего сообщать им всякий раз, когда компилятор может, что это вызовет переполнение.Если программист действительно хочет, чтобы операция была переполнена, он может закрыть компилятор, добавив unchecked(...)
.
. Если вы используете константы времени компиляции, компилятор может оценить значения этих констант и сказать вам, что этоможет вызвать переполнение.Если у вас есть переменные, компилятор не знает, какие значения имеют переменные, поэтому он не может точно сказать, будет ли операция переполнена.