https://github.com/Nekrolm/ubbook
Довольно обстоятельно
Содержание
Что такое UB и как оно проявляется
Как искать UB?
Целые и вещественные числа
Сужающие преобразования
Переполнение знаковых целых чисел
Числа с плавающей точкой
Integer promotion
char и знаковое расширение
Унарный минус для беззнаковых чисел
Нарушения lifetime объектов
Висячие ссылки — общие случаи
Автовывод типов и висячие ссылки
std::string_view
Range-based for
Cамоинициализация
std::vector и инвалидация ссылок
Висячие ссылки в лямбдах
Создание кортежей
Внезапная мутабельность
Proxy-объекты и ссылки
use-after-move
lifetime extension
C++20 direct initialization и ссылочные поля
Тернарный оператор
Корутины и время жизни
(Не)работающий синтаксис
Most Vexing Parse
Const
std::move
Потерянный return
Эллипсис и функции с произвольным числом аргументов
operator ,
function-try-block
Пустые структуры и типы нулевого размера
(Не)явное приведение типов
Многомерный operator[]
Операторы сравнения в C++20
Атрибут [assume]]
Конструкторы по умолчанию и = default
implicit bool
Стандартная библиотека
NULL-терминированные строки
Конструирование std::shared_ptr
shared_from_this
потоки ввода/вывода
std::aligned_storage
функции стандартной библиотеки как параметры
std::ranges::views
operator[] ассоциативных контейнеров
std::enable_if/std::void_t
Конструкторы контейнеров
std::uniform_int_distribution
std::ranges::transform | filter
vector::reserve и vector::resize
std::function
std::forward
Исполнение программы
Бесконечные циклы
Рекурсия
Ложный noexcept
Переполнение буфера
Сборщик мусора
RAII vs (N)RVO
Разыменование nullptr
Static initialization order fiasco
Static inline
ODR violation
Зарезервированные имена
Тривиальные типы и ABI
Неинициализированные переменные
Ranges. Unreachable sentinel
Невиртуальные виртуальные функции
Variable length array
ODR violation и разделяемые библиотеки
Владение и исключения
Происхождение указателей
Невалидные указатели
Placement operator new[]
Невыровненные ссылки
strict aliasing
Асинхронность и параллелизм
Race condition
shared_ptr
thread::join
Повторный захват mutex
Signal-unsafe
condition_variable
Гонки за vptr
std::async
Файловая система