
Сетевой код на C++: чек-лист перед выкатом в прод
Что проверить в сетевом коде на C++ до того, как он уйдёт под нагрузку: таймауты, частичные записи, обработка EINTR, лимиты дескрипторов и корректное завершение соединений.

Что проверить в сетевом коде на C++ до того, как он уйдёт под нагрузку: таймауты, частичные записи, обработка EINTR, лимиты дескрипторов и корректное завершение соединений.

Разбор строк через std::stringstream и ручные циклы даёт лишние копии и падает на кривом вводе. Разбираем std::string_view, std::from_chars и подходы к разбору без аллокаций на C++17 и C++20.

Три популярных фреймворка для юнит-тестов в C++: чем отличаются по скорости сборки, синтаксису и возможностям, что мокать проще и когда какой брать.

Проект собирается локально, а на CI падает с undefined reference. Разбираемся, где заканчивается заголовочный файл и начинается линковка, и почему CMake здесь надёжнее ручных флагов.

Как организовать сборку C++ через CMake, чтобы проект собирался у коллеги без правки путей: target-based подход, поиск зависимостей и типичные грабли с переменными и глобальными флагами.

Где ставить const, а где он бесполезен, чем const& отличается от const и как не сломать бинарную совместимость. Практический чек-лист для C++17 и новее.

Ручной new/delete — источник утечек и двойных освобождений. Разбираем, как владение памятью выражать через типы, а не комментарии, и когда какой умный указатель уместен.

std::atomic не делает код автоматически потокобезопасным. Разбираем ошибки с моделями памяти, составными операциями и ложным ощущением защиты — на примерах, которые компилируются, но ведут себя не так, как ждёт автор.

Как безопасно делить данные между потоками в C++17/20: mutex против atomic, где нужен lock_guard, а где обойтись без него, и почему condition_variable проверяют в цикле.

Исключения, коды возврата, std::expected и std::optional решают одну задачу — сообщить о неудаче, но по-разному бьют по производительности и читаемости. Разбираем, где какой подход платит меньше.

Разбор захвата, времени жизни и стирания типа в лямбдах C++. Где скрытая аллокация, где висячая ссылка и почему std::function в горячем цикле стоит вам процентов производительности.

Ручной цикл for с индексом переписывают на std::ranges не ради моды, а потому что он молча ломается на пустых контейнерах и off-by-one. Разбираем, какие алгоритмы STL экономят время, а какие тянут за собой сюрпризы.