Библиотека C/C++ разработчика | cpp, boost, qt
19.5K subscribers
1.99K photos
64 videos
16 files
4.26K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🍪 Как std::hex меняет поведение вывода?

Манипуляторы — не просто функции. Они изменяют внутренние флаги потока.

💡 Под капотом — состояние

std::ostream хранит std::ios_base::fmtflags:

std::cout << std::hex << 255;  // ff
std::cout << 10; // a (всё ещё hex!)


⚡️ Флаги остаются:

std::cout.setf(std::ios::hex, std::ios::basefield);
// Эквивалентно std::hex


💡 Сохранение состояния:

std::cout << std::hex << 255;
// Или
std::ios oldState(nullptr);
oldState.copyfmt(std::cout);
// ... вывод ...
std::cout.copyfmt(oldState); // Восстановление



❗️Манипуляторы — это состояние. Не забывай сбрасывать флаги в коде.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
🔗 libfoo.a vs libfoo.so: что выбрать?

Статическая и динамическая линковка — это выбор между размером бинарника и удобством обновлений.

❗️Статическая линковка (.a на Linux, .lib на Windows):

g++ main.cpp -static -o program


Один файл, работает везде
Большой размер (мегабайты вместо килобайт)
Обновление библиотеки = пересборка всего


❗️Динамическая линковка (.so на Linux, .dll на Windows):
g++ main.cpp -o program  # По умолчанию


Маленький бинарник
Обновление библиотеки не требует пересборки
Нужна библиотека на целевой системе
"DLL hell" / dependency conflicts


🐸 Когда что использовать:

Статика: embedded, CLI-утилиты, дистрибуция
Динамика: системные демоны, плагины, shared libs


💡 Проверить зависимости: ldd ./program (Linux)


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
AI-агенты 2026: системный подход к автономности

Даже в мире C++ нельзя игнорировать ИИ. В новом году мы учимся проектировать высокопроизводительные системы, где логику принятия решений берут на себя агенты.

Что разберём на курсе:

— архитектура ReAct: как разделить логику и действия агента;
— построение сверхбыстрых RAG-систем для работы с документацией;
— протокол MCP: как подружить разные модели в одной системе;
— оркестрация через n8n для автоматизации разработки.

🎁 До 12 января действует акция «3 в 1»: курс по ИИ-агентам + 2 курса в подарок.

Прокачать системный AI
👍3🥰1
🐸 Подборка вакансий для C++-разработчиков за неделю

C Developer (VPP/DPDK) — от 200 000 ₽ Офис/удалёнка (Москва)

Программист С/Linux — от 300 000 ₽ Удалёнка

C/C++ Developer — от 400 000 ₽ Удалёнка

Reverse engineer — от 400 000 ₽ Гибрид (Санкт-Петербург)

C++-разработчик (Linux) — Удалёнка

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#вакансии
👍2
🤔 Теоретический вопрос

Вопрос: У map и set есть методы find() и count(). Оба могут проверить наличие элемента. В чём разница и когда какой метод предпочтительнее использовать с точки зрения производительности?


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#междусобойчик
😁32
🍪 Почему compare_exchange_weak может "случайно" провалиться?

Многие разработчики думают, что compare_exchange_weak — это просто облегчённая версия compare_exchange_strong. На самом деле у неё есть неочевидное поведение: она может вернуть false, даже если значение совпадает.


🍿 Как это работает:

На некоторых архитектурах (ARM, PowerPC) атомарные операции реализованы через инструкции load-link/store-conditional (LL/SC). Процессор помечает адрес памяти при чтении и проверяет при записи — не изменился ли он.

Но вот проблема: между LL и SC может произойти spurious failure — ложный отказ. Это случается, если:

• Произошло переключение контекста
• Кеш-линия была вытеснена
• Другой процессор обратился к соседней памяти

std::atomic<int> counter{0};
int expected = 0;
// Может вернуть false, даже если counter == 0!
bool success = counter.compare_exchange_weak(expected, 1);


✈️ На x86 такого нет — там используется инструкция CMPXCHG, которая атомарна на уровне железа. Но спецификация C++ допускает spurious failures для переносимости.


💡 Практический вывод:

Всегда используй compare_exchange_weak в цикле. Для однократных попыток бери compare_exchange_strong — она гарантирует, что false означает реальное несовпадение значений.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5👍3