fa
Feedback
Библиотека C/C++ разработчика | cpp, boost, qt

Библиотека C/C++ разработчика | cpp, boost, qt

رفتن به کانال در Telegram

Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA

نمایش بیشتر

📈 تحلیل کانال تلگرام Библиотека C/C++ разработчика | cpp, boost, qt

کانال Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 17 154 مشترک است و جایگاه 7 717 را در دسته فناوری و برنامه‌ها و رتبه 39 202 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 17 154 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 22 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -16 797 و در ۲۴ ساعت گذشته برابر 2 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 8.98% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 5.14% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 1 540 بازدید دریافت می‌کند. در اولین روز معمولاً 881 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 6 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند c++, навигация, компилятор, удалёнка, developer تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXS...

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 23 ژوئن, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

17 154
مشترکین
+224 ساعت
-137 روز
-16 79730 روز
جذب مشترکین
ژوئن '26
ژوئن '26
+52
در 3 کانال‌ها
مه '26
+84
در 2 کانال‌ها
Get PRO
آوریل '26
+15 043
در 2 کانال‌ها
Get PRO
مارس '26
+11
در 2 کانال‌ها
Get PRO
فوریه '26
+41
در 4 کانال‌ها
Get PRO
ژانویه '26
+41
در 2 کانال‌ها
Get PRO
دسامبر '25
+25
در 3 کانال‌ها
Get PRO
نوامبر '25
+26
در 2 کانال‌ها
Get PRO
اکتبر '25
+38
در 1 کانال‌ها
Get PRO
سپتامبر '25
+22
در 0 کانال‌ها
Get PRO
اوت '25
+36
در 2 کانال‌ها
Get PRO
ژوئیه '25
+35
در 1 کانال‌ها
Get PRO
ژوئن '25
+48
در 0 کانال‌ها
Get PRO
مه '25
+46
در 5 کانال‌ها
Get PRO
آوریل '25
+53
در 9 کانال‌ها
Get PRO
مارس '25
+127
در 53 کانال‌ها
Get PRO
فوریه '25
+85
در 46 کانال‌ها
Get PRO
ژانویه '25
+56
در 36 کانال‌ها
Get PRO
دسامبر '24
+127
در 38 کانال‌ها
Get PRO
نوامبر '24
+427
در 38 کانال‌ها
Get PRO
اکتبر '24
+349
در 35 کانال‌ها
Get PRO
سپتامبر '24
+295
در 35 کانال‌ها
Get PRO
اوت '24
+150
در 36 کانال‌ها
Get PRO
ژوئیه '24
+93
در 37 کانال‌ها
Get PRO
ژوئن '24
+227
در 33 کانال‌ها
Get PRO
مه '24
+324
در 35 کانال‌ها
Get PRO
آوریل '24
+363
در 36 کانال‌ها
Get PRO
مارس '24
+424
در 29 کانال‌ها
Get PRO
فوریه '24
+410
در 29 کانال‌ها
Get PRO
ژانویه '24
+427
در 24 کانال‌ها
Get PRO
دسامبر '23
+11 871
در 45 کانال‌ها
Get PRO
نوامبر '23
+282
در 10 کانال‌ها
Get PRO
اکتبر '23
+745
در 23 کانال‌ها
Get PRO
سپتامبر '23
+993
در 0 کانال‌ها
Get PRO
اوت '23
+702
در 0 کانال‌ها
Get PRO
ژوئیه '23
+536
در 0 کانال‌ها
Get PRO
ژوئن '23
+378
در 0 کانال‌ها
Get PRO
مه '23
+582
در 0 کانال‌ها
Get PRO
آوریل '23
+370
در 0 کانال‌ها
Get PRO
مارس '23
+886
در 0 کانال‌ها
Get PRO
فوریه '23
+313
در 0 کانال‌ها
Get PRO
ژانویه '23
+355
در 0 کانال‌ها
Get PRO
دسامبر '22
+429
در 0 کانال‌ها
Get PRO
نوامبر '22
+628
در 0 کانال‌ها
Get PRO
اکتبر '22
+308
در 0 کانال‌ها
Get PRO
سپتامبر '22
+369
در 0 کانال‌ها
Get PRO
اوت '22
+352
در 0 کانال‌ها
Get PRO
ژوئیه '22
+431
در 0 کانال‌ها
Get PRO
ژوئن '22
+499
در 0 کانال‌ها
Get PRO
مه '22
+244
در 0 کانال‌ها
Get PRO
آوریل '22
+215
در 0 کانال‌ها
Get PRO
مارس '22
+367
در 0 کانال‌ها
Get PRO
فوریه '22
+164
در 0 کانال‌ها
Get PRO
ژانویه '22
+270
در 0 کانال‌ها
Get PRO
دسامبر '21
+279
در 0 کانال‌ها
Get PRO
نوامبر '21
+297
در 0 کانال‌ها
Get PRO
اکتبر '21
+367
در 0 کانال‌ها
Get PRO
سپتامبر '21
+420
در 0 کانال‌ها
Get PRO
اوت '21
+430
در 0 کانال‌ها
Get PRO
ژوئیه '21
+398
در 0 کانال‌ها
Get PRO
ژوئن '21
+278
در 0 کانال‌ها
Get PRO
مه '21
+464
در 0 کانال‌ها
Get PRO
آوریل '21
+488
در 0 کانال‌ها
Get PRO
مارس '21
+488
در 0 کانال‌ها
Get PRO
فوریه '21
+493
در 0 کانال‌ها
Get PRO
ژانویه '21
+370
در 0 کانال‌ها
Get PRO
دسامبر '20
+12 347
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
24 ژوئن+1
23 ژوئن+4
22 ژوئن+7
21 ژوئن+2
20 ژوئن+1
19 ژوئن+5
18 ژوئن+3
17 ژوئن+5
16 ژوئن+2
15 ژوئن+2
14 ژوئن+2
13 ژوئن+1
12 ژوئن+2
11 ژوئن0
10 ژوئن+1
09 ژوئن0
08 ژوئن0
07 ژوئن0
06 ژوئن0
05 ژوئن+2
04 ژوئن+9
03 ژوئن+3
02 ژوئن0
01 ژوئن0
پست‌های کانال
🎮 Пишем игру на C++ и Qt с нуля Серия для тех, кто хочет не читать про язык, а собрать рабочий проект — пусть и простой. 31
🎮 Пишем игру на C++ и Qt с нуля Серия для тех, кто хочет не читать про язык, а собрать рабочий проект — пусть и простой. 31 видео, от пустого окна до играбельного билда. – Qt как обвязка: GUI, event loop и сигналы-слоты – Низкий порог входа: рассчитано на тех, кто только осваивает C++ – Цельный результат: на выходе — законченная игра 👉 Плейлист ✏️ Подойдёт такой формат «учимся на проекте» для онбординга джунов, или для С++ полезнее сразу копать в стандарт и инструментарий? 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #свежак

2
🍕 Проекции на поля структур В прошлый раз разобрались, что такое проекция и зачем она нужна. Теперь — самый частый сценарий на практике: структура с кучей полей, и алгоритмы хочется гонять по разным из них, не плодя лямбды. struct Person { std::string name; int age; double height; }; std::vector<Person> people = { {"Алиса", 30, 165}, {"Борис", 25, 180}, {"Виктор", 35, 175}, }; 🤠 Одна структура — много ключей Вся прелесть в том, что один и тот же контейнер крутим по любому полю — меняем только &Person::поле: // по возрасту std::ranges::sort(people, std::less{}, &Person::age); // Борис(25), Алиса(30), Виктор(35) // самый высокий auto tallest = std::ranges::max_element(people, std::less{}, &Person::height); std::cout << tallest->name; // Борис // найти по имени auto found = std::ranges::find(people, "Алиса", &Person::name); std::cout << found->age; // 30 Указатель &Person::age годится в проекции, потому что алгоритм зовёт её через std::invoke, а тот превращает его в p.age. Проекцией может быть что угодно вызываемое. Заметьте: max_element и find вернули итератор на целого Person. Проекция выбирает ключ, но на выходе всегда исходный элемент. ‼️ sort сортирует на месте. Гоняете сниппеты подряд по одному people — каждый следующий видит уже переставленный вектор (max_element/find это не волнует). 👑 Компаратор + проекция = направление + ключ Проекция говорит «по какому полю», компаратор — «в каком порядке»: // по убыванию роста std::ranges::sort(people, std::greater{}, &Person::height); // Борис(180), Виктор(175), Алиса(165) std::less → std::greater — перевернули порядок, поле не трогали. Компаратор можно сократить до {}, но не выбросить совсем: std::ranges::sort(people, {}, &Person::age); // ок std::ranges::sort(people, &Person::age); // не компилируется Проекция — третий аргумент, поэтому без компаратора &Person::age уедет в его слот. {} этот слот занимает и подставляет дефолт — а дефолт тут std::ranges::less, не std::less (на наших данных без разницы). 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #константная_правильностьx
824
3
⏰ Уже сегодня в 19:00 (МСК) стартует наш открытый урок! Знаем, летом хочется отложить учёбу на осень. Но пока остальные отдых
⏰ Уже сегодня в 19:00 (МСК) стартует наш открытый урок! Знаем, летом хочется отложить учёбу на осень. Но пока остальные отдыхают 😅, мы предлагаем без лишней конкуренции прокачать свой workflow и начать закрывать тикеты в три раза быстрее. Тема: «AI-инструменты в разработке: пишем код быстрее» Мы покажем живой разбор реального проекта: как с помощью AI-ассистентов мгновенно разбираться в чужой кодовой базе, искать нужные участки и собирать Pull Request. Только рабочие промпты, которые сэкономят вам часы рутины. 🎙 Спикер — Ольга Лукьянова, руководитель команды в SourceCraft (18+ лет развивала инструменты в JetBrains и Huawei). 👉 Узнать, как ускорить разработку с AI
897
4
🐸Proglib.academy
🐸Proglib.academy
988
5
Что выведет код?
1 031
6
بدون متن...
995
7
📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #развлекалово
📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #развлекалово
1 118
8
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и инт
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++. 😎 Интересное: • Свой malloc для ОС: от наивного списка до бинов — серия статей о написании своего аллокатора • EXPECT_DEATH не ловит исключение — разбираем как тесты обрабатывают падения • Hazard pointers без воды — разбор безопасного освобождения памяти в lock-free структурах • doctest: тесты прямо рядом с кодом — способ написания unit-тестов прямо в файле с бизнес логикой 📙 Ranges: • Проекции: Что такое проекция? 🔹📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #свежак
1 193
9
🤖 Мы тут подготовили небольшую игру по ИИ-агентам В ней нужно собрать AI-агента на LangGraph: выбрать узлы, пройти развилки
🤖 Мы тут подготовили небольшую игру по ИИ-агентам В ней нужно собрать AI-агента на LangGraph: выбрать узлы, пройти развилки и запустить собственный workflow. Никакой теории — сразу практика. Можно наглядно увидеть, как работают агентные системы, проверьте свои знания или показать другим как это всё работает 🔥 🎁 За прохождение получите персональную скидку на курс. Чем больше баллов наберете — тем больше будет скидка. Плюс сейчас действует предложение: покупаешь 1 курс, получаешь еще 2 любых в подарок. Для этого надо будет оставить заявку на сайте академии после прохождения игры. 🚀 Собрать своего AI-агента
1 129
10
☠️ Задача на выходные: std::thread, который убивает программу при выходе из функции Маленькая безобидная функция создаёт std::thread, что-то делает и в конце — terminate() и аварийное завершение всего приложения. Без единого явного throw в коде. void DoWork(bool earlyExitCondition) { std::thread worker([]() { Sleep(2000); std::cout << "Done\n"; }); if (earlyExitCondition) { return; // worker все ещё joinable! } worker.join(); } Задача: объясни, почему деструктор std::thread вызывает std::terminate, если поток всё ещё joinable, и предложи паттерн, который защищает от этого на всех путях выхода из функции, включая исключения. 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #междусобойчик
1 638
11
🐸 Подборка вакансий для C++-разработчиков за неделю Backend Developer (Indexer) — от 12 500 и до 20 800 $ Удалёнка Разработчик Rust/C++ — Удалёнка/Гибрид (Новосибирск) C++ Developer — от 300 000 ₽ Удалёнка Разработчик C++ — Удалёнка/Гибрид (Москва) Junior C++ разработчик — от 150 000 и до 250 000 ₽ Гибрид (Санкт-Петербург) Разработчик C — Офис/Удалёнка (Москва) 📍Навигация: Вакансии • Задачи • Собесы • Канал в Max Библиотека C/C++ разработчика #вакансии
1 160
12
🤖 Используешь AI для написания кода? В Яндексе покажут, как применять AI для реальных задач разработки. 23 июня в 19:00 совм
🤖 Используешь AI для написания кода? В Яндексе покажут, как применять AI для реальных задач разработки. 23 июня в 19:00 совместно с Яндексом проведём открытый урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов». Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft. Более 18 лет развивала инструменты для разработчиков в JetBrains и руководила разработкой IDE в Huawei. Что получишь на уроке: — поймёшь, как использовать AI-ассистентов и облачных агентов в работе; — научишься быстрее разбираться в новых проектах и кодовой базе; — узнаешь, какие задачи стоит отдавать AI и как получать качественный результат; — увидишь полный workflow работы с AI: от постановки задачи до код-ревью. На уроке — живой разбор реального проекта с кодом. Ольга покажет промпты из рабочих сценариев и ответит на ваши вопросы в Q&A. ⚠️ Количество мест ограничено 🗓️ Когда: 23 июня, 19:00 (МСК) 👉 Занять место на открытом уроке
1 117
13
Пояснение: Автор пишет: «Я иногда оставляю висящий else просто как угрозу компилятору — чтобы он точно выполнил этот if, а не
Пояснение: Автор пишет: «Я иногда оставляю висящий else просто как угрозу компилятору — чтобы он точно выполнил этот if, а не то...» В обычном английском фраза «or else» означает угрозу — «а не то...» / «а иначе пожалеешь» 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #развлекалово
1 406
14
😊 doctest: тесты прямо рядом с кодом Что если тесты можно писать в том же файле, что и реализацию, без потери скорости сборки? Именно эту идею продаёт doctest. Это самый быстрокомпилируемый фреймворк из популярных: подключение заголовка почти не утяжеляет сборку. А с флагом DOCTEST_CONFIG_DISABLE все тесты вырезаются из релизного бинарника полностью. Такой подход меняет привычку: проверку можно положить сразу под функцию, пока логика свежа в голове. Тест становится живой документацией, а не отдельным проектом в папке tests/. int add(int a, int b) { return a + b; } TEST_CASE("add") { CHECK(add(2, 2) == 4); } ✏️ Держите ли вы тесты отдельно от кода — или допускаете их соседство в одном файле? 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #константная_правильностьx
1 438
15
⏰ Уже сегодня в 19:00 (МСК) стартует открытый урок! Тема: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа. Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт. 🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru. 🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов». 👉 Успей присоединиться к уроку
1 375
16
🧵 Hazard pointers без воды Разбор безопасного освобождения памяти в lock-free структурах: почему нельзя просто delete узел,
🧵 Hazard pointers без воды Разбор безопасного освобождения памяти в lock-free структурах: почему нельзя просто delete узел, который кто-то ещё держит. • Гонка: X взял указатель на вершину и уснул, Y удалил узел, X читает по освобождённому адресу. UB • ABA: аллокатор переиспользует адрес, CAS видит «тот же» указатель и возвращает мёртвое значение. Развал структуры • Идея: поток публикует адрес в атомарный hp_ptr. Пока опубликован — узел не удаляют • Удаление откладывается: кандидаты копятся в retired_list, реальный delete идёт позже, в фазе scan Scan собирает все активные hp_ptr под shared_mutex, сортирует и бинарным поиском проверяет кандидатов. Нет в активных — deleter вызывается. 👉 Разбор 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #свежак
1 390
17
🎱 Проекции: Что такое проекция? Одна из полезнейших тем в C++ диапазонах — это проекции. Проекция — это функция, которая «извлекает» ключ из элемента перед тем, как алгоритм с ним работает. Подавляющее большинство алгоритмов из std::ranges принимают необязательный параметр proj; по умолчанию там std::identity — элемент идёт как есть. ⏰ ranges::sort — сортировка по полю Возьмём те самые задачи из прошлого поста: struct Task { std::string name; int priority; }; std::vector<Task> tasks = { {"Код", 1}, {"Деплой", 3}, {"Тесты", 2} }; std::ranges::sort(tasks, {}, &Task::priority); // порядок: Код(1), Тесты(2), Деплой(3) Здесь {} — компаратор по умолчанию (ranges::less), а &Task::priority — проекция. Для каждой пары алгоритм считает less(a.priority, b.priority). Помните, в свёртках, чтобы сложить по priority, пришлось писать лямбду? Тут поле достаёт сама проекция. 🎨 Проекция по указателю на член Самый частый случай — &Тип::поле. И работает не только в sort: // найти задачу с priority == 3 auto it = std::ranges::find(tasks, 3, &Task::priority); // *it == Task{"Деплой", 3} // посчитать задачи с priority > 1 auto n = std::ranges::count_if(tasks, [](int p){ return p > 1; }, &Task::priority); // n == 2 Обратите внимание на порядок: у find проекция идёт сразу после искомого значения (компаратора у него нет), а у count_if — после предиката. У каждого алгоритма свой набор параметров, проекция в нём всегда последняя. 🧁 Проекцией может быть что угодно вызываемое Не только поле. Подойдёт указатель на метод, лямбда, свободная функция — всё, что переваривает std::invoke: std::vector<std::string> v = {"apple", "fig", "banana"}; std::ranges::sort(v, {}, &std::string::size); // по длине // "fig"(3), "apple"(5), "banana"(6) std::vector<int> nums = {-5, 2, -1, 3}; std::ranges::sort(nums, {}, [](int x){ return std::abs(x); }); // по модулю // -1, 2, 3, -5 🎁 Проекция меняет ВЗГЛЯД, но не результат Это главное, что надо уложить в голове. Проекция влияет только на то, ПО ЧЕМУ алгоритм принимает решения. Возвращает он по-прежнему исходные элементы, а не спроецированные значения: auto top = std::ranges::max(tasks, {}, &Task::priority); // top — это Task{"Деплой", 3}, а НЕ число 3 // (и это копия: max возвращает элемент по значению) auto it = std::ranges::min_element(tasks, {}, &Task::priority); // *it — Task{"Код", 1}, итератор на сам элемент (копии нет) То есть проекция — это «по какому ключу», а не «во что превратить». Если нужно именно превратить элементы — это уже views::transform. 🍕 У бинарных алгоритмов проекций две Там, где сравниваются два диапазона (equal, mismatch, …), проекций тоже две — по одной на каждый вход: std::vector<Task> a = { {"X", 1}, {"Y", 2} }; std::vector<Task> b = { {"A", 1}, {"B", 2} }; // равны ли списки по приоритетам, игнорируя имена? bool same = std::ranges::equal(a, b, {}, &Task::priority, &Task::priority); // {} — предикат по умолчанию, дальше proj1 и proj2 // true: 1 == 1, 2 == 2 ‼️ Несколько подводных камней • Порядок аргументов. proj идёт после компаратора, а не вместо. sort(tasks, &Task::priority) — указатель на поле не годится в компараторы → простыня ошибок. Правильно: sort(tasks, {}, &Task::priority). • Проекцию зовут много раз. В sort — на каждом сравнении, O(n log n) вызовов. Тяжёлую (парсит строку) выгоднее посчитать заранее и сортировать по готовым ключам. • Проекция ≠ преобразование вывода. На выходе всегда исходные элементы. Превратить их — это views::transform. • Свёртки без проекций. У fold_* параметра proj нет (хотя у for_each и transform есть). «Свернуть по полю» — только лямбдой или через views::transform. 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #константная_правильностьx
1 091
18
🐸Proglib.academy
🐸Proglib.academy
1 342
19
🤕😱 Канала не хватает одного — твоего буста. Не лайка, не репоста. Именно буста, который реально качнёт канал вверх Если дум
🤕😱 Канала не хватает одного — твоего буста. Не лайка, не репоста. Именно буста, который реально качнёт канал вверх Если думал, что от одного голоса ничего не зависит, то это не так. На деле каждый буст поднимает уровень канала и открывает ему новые возможности. А тебе за это больше полезностей в канале‼️ ❓ За что бустить? За Сторис — наш формат для небольших, но полезных находок, которые жалко оставлять «за кадром»: • интересные инструменты • короткие технические заметки • полезные ссылки • вопросы для программистов • быстрые опросы 👾 Жми кнопку буста под этим постом. Этим ты внесёшь ощутимый вклад в развитие канала. ➡️ Буст канала Библиотека C/C++ разработчика
1 604
20
🍬 EXPECT_DEATH не ловит исключение. Он запускает ваш код в отдельном процессе и ждёт его смерти Если думал, что death-тест в GoogleTest — это просто проверка «упадёт или нет», то это не так. На деле фреймворк изолирует ваш код в дочернем процессе, дожидается его завершения и проверяет, что тот умер именно так, как вы ожидали. Сам тест-раннер при этом остаётся жив — в этом весь смысл. 💡Когда вы пишете EXPECT_DEATH(stmt, "regex"), фреймворк форкает текущий процесс. Дочерний выполняет stmt, родитель через waitpid() ждёт его завершения и анализирует статус выхода. ❓ Зачем вообще отдельный процесс? Потому что abort(), std::terminate или сработавший assert убивают процесс по-настоящему. Поймать это в том же процессе как исключение нельзя — управление уже не вернётся. Единственный способ протестировать смерть, не убив сам тест-раннер, — изолировать её в ребёнке. EXPECT_DEATH( { std::abort(); }, ".*" ); ❗️ Родитель и ребёнок после форка — два независимых адресных пространства (copy-on-write). Краш в ребёнке для родителя — просто ненулевой код возврата или сигнал. ❗️Death-тест — это не try/catch, это управляемое самоубийство подпроцесса. Если держать это в голове, перестаёшь удивляться, почему std::cout внутри блока ведёт себя странно. ❓ А вы проверяете abort()-ветки или оставляете их «на авось»? 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #константная_правильность
1 527