Здравствуйте, cppguard, Вы писали:
C> И вот читая очередную статью про противоестественную ошибку на пустом месте
Лично я не считаю использование преобразование типов в стиле Си пустым местом. А если б его не было, то компилятор выдал бы хотя бы предупреждение
C> у меня вдруг возник вопрос: а как вообще в более-менее крупных проектах выполняется контроль сгенерированного кода?
Это не надо. У тебя есть
два три типа проектов:
1) 99% это проекты где тебе не очень важно что там сгенерирует компилятор. Ты знаешь что двоичный код C++ достаточно эффективен и тебе этого хватает. В таком случае ты включаешь динамические (sanitizer-ы) и статические (clang-tidy и компания) анализаторы, пишешь модульные тесты и радуешься тому что у тебя такой классный и не падучий код. Код реально будет очень классным и почти не будет падать по причинам плохого знания C++. Что значит "почти"? Почти значит — ты всё еще можешь устроить гонки, если постараешься, но в каком языке ты не можешь? ааа... правильно, в любом можешь если хорошо постараешься!
2) ты в 0.5% проекторв где важна safety (хрен знает как на русский перевести, ОБЖ короче). Это когда у тебя атомный реактор или критический компонент в самолете или самоходной карете. Ну, ты в жопе, тут ничего иного не скажешь. Если ты вдруг в неё залез, то ты пишешь на Си-с-классами где нельзя кидать исключения, нельзя выделять память динамически и много других "нельзя". Из хороших моментов, тот компилятор что ты исполняешь тебя сразу бьет по рукам за попытку прыжка на месте (а иногда и расстреливает), а статический анализатор (за который ты отвалил дохулиард не-рублей) так же, сцуко, люто бдит. В итоге у тебя код где ты точно знаешь что и почему происходит, но за очень много денег, т.к. твоя производительность упала в 5-10 раз.
3) ты в другой части 0.5% проектов, которые пишут трейдеры. Ну... тут ты прав и godbolt, кажется написанный трейдером, твой лучший друг и советник