Я регулярно вижу одну и ту же ошибку у команд: лезут в C++-оптимизации, не понимая, где у них уже сломан алиасинг. А потом удивляются, почему код «вроде правильный», а на -O2 начинает вести себя как хочет.
Коротко по сути:
1. Алиасинг в C++ — это не абстракция, а правила, по которым компилятор решает, можно ли считать два указателя на одну и ту же память независимыми.
2. Нарушил правило — получил undefined behavior. Не баг компилятора, а ваш баг.
3. История здесь показательная: язык долго жил с очень жесткими ограничениями, а комитет пытался закрыть дыру точечными предложениями.
4. На практике проблема упирается не в «теорию», а в проверяемость: код проходит ревью, тесты молчат, а потом ломается на другой версии компилятора или флагах сборки.
5. В будущем обещают сделать модель понятнее, но пока реальный вывод простой: если у вас низкоуровневый C++, алиасинг надо проверять так же жестко, как границы массива.
Я бы ставил это в один ряд с самыми опасными классами UB. Не потому что «страшно», а потому что слишком часто его не видно до продакшена ⚠️
Яндекс Сигнал
@YandexSignalPro
Я регулярно вижу одну и ту же ошибку у команд: лезут в C++-оптимизации, не понимая, где у них уже сломан алиас
Этот пост опубликован в Telegram-канале Яндекс Сигнал. Подписаться можно по ссылке: @YandexSignalPro.