О неопределенном поведении

Обычно UB считается чем-то, чего следует избегать, и в самом текущем стандарте C приведено довольно много примеров в приложении J.

Однако, Есть случаи, когда я не вижу вреда в использовании UB, кроме принесения в жертву переносимости.

Рассмотрим следующее определение:

int a = INT_MAX + 1;

Оценка этого выражения приводит к UB. Однако, если моя программа предназначена для работы, скажем, на 32-битном процессоре с модульной арифметикой, представляющей значения в двух дополнениях, я склонен полагать, что могу предсказать результат.

На мой взгляд, UB иногда бывает просто стандарт C говорит мне: «Надеюсь, ты знаешь, что делаешь, потому что мы не можем дать никаких гарантий относительно того, что произойдет».

Отсюда мой вопрос: безопасно ли иногда полагаться на машину? зависимое поведение, даже если стандарт C считает, что он вызывает UB, или "UB" действительно следует избегать, независимо от обстоятельств?

11
задан Dan 13 October 2012 в 01:19
поделиться