Популярные библиотеки и фреймворки
В C++ нет единой «стандартной» экосистемы, как npm в JavaScript или crates.io в Rust, поэтому набор используемых библиотек сильно зависит от области. Тем не менее есть несколько имён, которые встречаются в вакансиях и на проектах чаще остальных - именно они собраны ниже.
Не пытайтесь выучить всё сразу. Гораздо полезнее хорошо освоить одну-две библиотеки из своей области, чем поверхностно знать десяток. Подключать их проще всего через пакетные менеджеры Conan или vcpkg - см. Инструментарий для С++.
Это обзорная статья и стартовая навигация, а не полный каталог. Реально существующих библиотек на порядки больше, и под конкретную задачу почти всегда найдётся что-то ещё - ищите по своей предметной области, смотрите, что используют в похожих проектах, и сверяйтесь со свежими подборками (например, awesome-cpp). Задача этого списка - дать точку опоры тем, кто только начинает.
Инструменты разработки (компиляторы, отладчики, анализаторы, фреймворки тестирования) вынесены в отдельную статью - Инструментарий для С++.
Общего назначения
-
Boost - boost.orgОгромный набор библиотек, который исторически служит «полигоном» для стандартной библиотеки: многое из того, что сегодня входит в стандарт (умные указатели,
filesystem,optional,variant), сначала обкатывалось в Boost. Полезен и сейчас - там есть то, чего в стандарте до сих пор нет. Обратная сторона - размер: подключать Boost целиком ради одной функции не стоит, большинство его библиотек можно брать по отдельности. -
{fmt} - github.com/fmtlib/fmtБиблиотека форматирования строк, ставшая основой для
std::formatиз C++20. Быстрее и безопаснееprintf, читабельнее потоковiostream. Имеет смысл, если ваш компилятор ещё не поддерживаетstd::formatили нужны возможности сверх стандарта. -
spdlog - github.com/gabime/spdlogБыстрая библиотека логирования, построенная поверх {fmt}. Поддерживает вывод в файлы с ротацией, в консоль с подсветкой, асинхронный режим. Логирование - один из основных инструментов диагностики в бою, когда отладчик подключить невозможно.
-
range-v3 - github.com/ericniebler/range-v3Референсная реализация, на основе которой в C++20 появились
std::ranges. Позволяет писать преобразования последовательностей цепочкой, без явных итераторов и временных контейнеров. Актуальна, если нужны возможности, которые ещё не вошли в стандарт, или поддержка старых компиляторов.
Сеть и обмен данными
-
Asio - think-async.com/AsioФактический стандарт асинхронного ввода-вывода в C++ и основа для многих сетевых проектов. Существует в двух вариантах: как самостоятельная библиотека и как часть Boost. Хорошо сочетается с корутинами из C++20. Именно на её базе неоднократно предлагалась сетевая библиотека для стандарта.
-
nlohmann/json - github.com/nlohmann/jsonСамая популярная библиотека для работы с JSON в C++. Ценится за то, что код с ней выглядит почти как на языке с встроенной поддержкой JSON. Подключается одним заголовочным файлом. Если критична скорость разбора больших объёмов, стоит посмотреть на более быстрые альтернативы вроде simdjson или RapidJSON.
-
Protocol Buffers - protobuf.devБинарный формат сериализации от Google со схемой: структура данных описывается в отдельном файле, из которого генерируется код. Компактнее и быстрее JSON, а схема даёт контроль совместимости версий - важное свойство, когда клиент и сервер обновляются не одновременно.
-
gRPC - grpc.ioФреймворк удалённого вызова процедур поверх Protocol Buffers и HTTP/2. Распространён в микросервисной архитектуре, в том числе в связках, где сервисы написаны на разных языках.
-
POCO - pocoproject.orgНабор кроссплатформенных библиотек для сетевых и серверных приложений: HTTP-клиент и сервер, работа с базами данных, разбор XML и JSON, логирование. По духу ближе к «батарейки в комплекте», чем набор точечных библиотек.
Графический интерфейс
-
Qt - qt.ioСамый распространённый фреймворк для десктопных приложений на C++, давно переросший рамки GUI: в нём есть работа с сетью, базами данных, потоками, разбор форматов. Кроссплатформенный, с собственной IDE (Qt Creator). Важный нюанс - лицензирование: открытая версия распространяется под LGPL/GPL, для закрытого коммерческого продукта может потребоваться платная лицензия. Условия стоит изучить до начала разработки.
Вычисления, графика и машинное обучение
-
OpenCV - opencv.orgСтандарт де-факто в компьютерном зрении: обработка изображений и видео, детектирование объектов, калибровка камер. Используется в робототехнике, промышленном контроле качества, медицинской визуализации.
-
Eigen - libeigen.gitlab.ioБиблиотека линейной алгебры: матрицы, векторы, решение систем уравнений. Состоит только из заголовочных файлов и агрессивно оптимизирована. Часто встречается в робототехнике, симуляциях и компьютерном зрении.
-
CUDA - developer.nvidia.com/cuda-toolkit и OpenCL - khronos.org/openclДва подхода к вычислениям на видеокартах. CUDA работает только на оборудовании NVIDIA, но зрелее и удобнее; OpenCL - открытый стандарт, работающий на оборудовании разных производителей. Востребованы там, где задача хорошо распараллеливается: научные расчёты, обработка изображений, машинное обучение.
-
LibTorch (PyTorch C++) - pytorch.org/cppdocs и TensorFlow - tensorflow.orgC++ API двух основных фреймворков машинного обучения. Обучение моделей обычно ведётся на Python, а C++ применяется на этапе внедрения: когда готовую модель нужно запустить внутри приложения с жёсткими требованиями к скорости или без зависимости от Python.
Взаимодействие с другими языками
-
pybind11 - github.com/pybind/pybind11Позволяет сделать из C++ кода модуль, импортируемый в Python. Типичный сценарий: тяжёлые вычисления пишутся на C++, а логика верхнего уровня и эксперименты остаются на Python. На pybind11 построены обёртки многих известных проектов.