Если у меня есть:
unsigned int x;
x -= x;
ясно, что x
должно быть равно нулю после этого выражения, но везде, где я смотрю, они говорят, что поведение этого кода undefined, а не только значение x
(до до вычитания).
Два вопроса:
-
Действительно ли поведение этого кода undefined?
(Например, может ли произойти сбой кода [или хуже] на совместимой системе?) -
Если это так, , почему говорит, что поведение undefined, когда совершенно ясно, что
x
здесь должен быть здесь?то есть. Какое преимущество дает не определение поведения здесь?
Ясно, что компилятор мог просто использовать любую ценность мусора, которую он считал "удобной" внутри переменной, и она будет работать по назначению... что не так с этим подходом?