Библиотека C/C++ разработчика | cpp, boost, qt
Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA
Показати більше📈 Аналітичний огляд Telegram-каналу Библиотека C/C++ разработчика | cpp, boost, qt
Канал Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 23 192 підписників, посідаючи 5 866 місце в категорії Технології та додатки та 28 983 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 23 192 підписників.
За останніми даними від 05 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -10 788, а за останні 24 години на -8, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 6.89%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.01% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 1 597 переглядів. Протягом першої доби публікація в середньому набирає 931 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 9.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як c++, навигация, компилятор, удалёнка, developer.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Все самое полезное для плюсовика и сишника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/d6cd2932
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
#WXSSA”
Завдяки високій частоті оновлень (останні дані отримано 06 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
std::atexit. Найди баг в этом коде:
#include <cstdlib>
#include <iostream>
void dummy_handler() {
static int counter = 0;
std::cout << "Handler " << ++counter << "\n";
}
int main() {
// Регистрируем 100 обработчиков
for (int i = 0; i < 100; ++i) {
if (std::atexit(dummy_handler) != 0) {
std::cerr << "Failed at " << i << "\n";
return 1;
}
}
std::cout << "All registered!\n";
return 0;
}
❓ Вопрос: Гарантирует ли стандарт, что все 100 обработчиков зарегистрируются? Какое минимальное количество гарантируется? Как правильно обработать ошибку регистрации?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик RAG vs Fine-tuning: оптимизация ресурсов и точности;
— векторные хранилища (`FAISS`) и работа с индексами;
— реализация пайплайна для обработки документов без «галлюцинаций».
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Занятие проходит в рамках подготовки к курсу «Разработка AI-агентов». Только для тех, кто готов погружаться в детали.
Записаться на урокstd::atexit позволяет зарегистрировать функции, которые вызовутся автоматически при нормальном завершении программы.
#include <cstdlib>
#include <iostream>
void cleanup() {
std::cout << "Cleaning up resources...\n";
}
int main() {
std::atexit(cleanup);
std::cout << "Program running...\n";
return 0; // cleanup() вызовется автоматически
}
Ключевой момент: функции вызываются в порядке, обратном регистрации (LIFO).
❗️ Важно: std::atexit работает только при нормальном завершении (return из main или std::exit). При std::abort или неперехваченных исключениях функции не вызовутся.
❗️Best practice: используй RAII и деструкторы вместо atexit, когда это возможно. atexit — для глобального состояния и C-совместимости.
✏️ Используешь ли ты atexit в своих проектах?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотомclass Base {
virtual void process() = 0;
};
class Derived : public Base {
void process() override final { /* ... */ }
// ^^^^^
};
Теперь компилятор знает: Derived::process — последняя версия. При вызове через Derived* или Derived& он может девиртуализировать:
void hotPath(Derived& obj) {
obj.process(); // прямой вызов, не через vtable
}
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотомRAG) и методах дообучения для создания высоконагруженных решений.
Спикер — Игорь Стурейко, тимлид в «Газпроме» и AI-архитектор сложных решений на базе Kubernetes. Игорь подготовил видео о том, как инженерные принципы и MLOps помогают строить надёжных автономных агентов.
В программе занятия:
— эффективная индексация документов в векторные хранилища;
— использование LangChain и библиотек для работы с эмбеддингами;
— сравнение подходов RAG vs Fine-tuning.
📅 Когда: 23.01 в 19:00 МСК
Узнать подробностиЗатенение (shadowing) — когда локальная переменная скрывает переменную из внешней области видимости с тем же именем
В классах затенение особенно коварно: локальная переменная или параметр может скрыть член класса. И компилятор промолчит.
class Config {
int timeout_ = 5000;
public:
void setTimeout(int timeout_) { // параметр затеняет член!
timeout_ = timeout_;
// Член класса НЕ изменился
}
};
🍉 Способы решения проблемы
class Config {
int timeout_ = 5000;
public:
// 1. Разные имена
void setTimeout(int newTimeout) {
timeout_ = newTimeout;
}
// 2. Явный this->
void setTimeoutAlt(int timeout_) {
this->timeout_ = timeout_;
}
// 3. Через имя класса
void setTimeoutBase(int timeout_) {
Config::timeout_ = {timeout_};
}
// 4. Через временный объект
void setTimeoutDumb(int timeout_) {
*this = { .timeout = timeout_ };
// Но лучше так не писать
}
};
❗️ Включите -Wshadow-field для отлова таких багов.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильностьmap.emplace(key_args..., value_args...), компилятор не может понять, где заканчиваются аргументы ключа и начинаются аргументы значения. Для pair это особенно критично.
std::piecewise_construct — это тег-пустышка, которая активирует специальный конструктор pair:
pair(piecewise_construct_t,
tuple<KeyArgs...>,
tuple<ValueArgs...>)
⚡️ Кортежи создают явную границу. Компилятор видит два отдельных пакета параметров и использует std::apply для распаковки каждого tuple в конструктор соответствующего элемента пары.
❗️Практика:
Без этого механизма невозможно было бы создать pair со сложными типами in-place. Теперь вы избегаете промежуточных копий и move-операций.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом#include <iostream>
#include <thread>
#include <chrono>
struct Counter {
long long a;
long long b;
};
void increment(long long& val) {
for (int i = 0; i < 100'000'000; i++) val++;
}
int main() {
Counter cnt{ 0, 0 };
auto start = std::chrono::high_resolution_clock::now();
std::thread t1(increment, std::ref(cnt.a));
std::thread t2(increment, std::ref(cnt.b));
t1.join(); t2.join();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms\n";
return 0;
}
❓ Вопрос: Как можно ускорить работу данного кода?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
