Update what_is_ub.md

This commit is contained in:
Dmitry Sviridkin
2024-10-15 23:45:06 +01:00
committed by GitHub
parent 5a10a24f91
commit 96d67df18a

View File

@@ -41,7 +41,7 @@
С неопределенным поведением часто путают другие понятия.
1. Еще одна страшная аббревиатура UB — неуточненное (_unspecified_) поведение. Стандарт не уточняет, что именно может произойти, но описывает варианты. Так, например, порядок вычисления аргументов функции — поведение неуточненное.
2. Поведение, определяемое реализацией (_implementation-defined_) — надо смотреть документацию для вашей платформы и вашего компилятора.
3. Ошибочное поведения (_erroneous_) — новинка C++26. Часть неопределенного поведения ,будет возможно переквалифицированна в эту категорию. Например, так поступили с чтением неинициализированных переменных. Разница с неопределенным — компилятору *очень рекомендуется* выдавать диагностики и запрещается выполнять умные оптимизации с неожиданными побочными эффектами.
3. Ошибочное поведения (_erroneous_) — новинка C++26. Часть неопределенного поведения будет, возможно, переквалифицированна в эту категорию. Например, так поступили с чтением неинициализированных переменных. Разница с неопределенным — компилятору *очень рекомендуется* выдавать диагностики и запрещается выполнять умные оптимизации с неожиданными побочными эффектами.
Эта тройка намного лучше неопределенного, хотя и имеет с ним одну общую черту: программа, полагающаяся на любое из них, вообще говоря, непереносима.