Библиотека C/C++ разработчика | cpp, boost, qt
Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA
Show more📈 Analytical overview of Telegram channel Библиотека C/C++ разработчика | cpp, boost, qt
Channel Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) in the Russian language segment is an active participant. Currently, the community unites 23 192 subscribers, ranking 5 866 in the Technologies & Applications category and 28 983 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 23 192 subscribers.
According to the latest data from 05 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -10 788 over the last 30 days and by -8 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 6.89%. Within the first 24 hours after publication, content typically collects 4.01% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 597 views. Within the first day, a publication typically gains 931 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 9.
- Thematic interests: Content is focused on key topics such as c++, навигация, компилятор, удалёнка, developer.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для плюсовика и сишника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/d6cd2932
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
#WXSSA”
Thanks to the high frequency of updates (latest data received on 06 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
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++ разработчика
#междусобойчик
Available now! Telegram Research 2025 — the year's key insights 
