Как правило, UB рассматривается как нечто, чего следует избегать, а текущий стандарт C перечисляет довольно много примеров в приложении J.
Однако есть случаи, когда я не вижу никакого вреда в использовании UB, кроме жертвоприносаемости.
Рассмотрим следующее определение:
int a = INT_MAX + 1;
Оценка этого выражения приводит к UB. Однако, если моя программа предназначена для работы на, скажем, 32-битном процессоре с модульной арифметикой, представляющей значения в Two Complement, я склонен полагать, что могу предсказать результат.
По моему мнению, UB иногда просто стандартный способ сказать мне: "Надеюсь, вы знаете, что делаете, потому что мы не можем гарантировать никаких гарантий того, что произойдет".
Следовательно, мой вопрос: безопасно ли иногда полагаться на зависящее от машины поведение, даже если стандарт C считает, что он вызывает UB, или "UB" действительно следует избегать, независимо от обстоятельств?