Не попадитесь на накрученные каналы! Узнайте, не накручивает ли канал просмотры или подписчиков Проверить канал на накрутку
Прикрепить Телеграм-аккаунт Прикрепить Телеграм-аккаунт

Телеграм канал «C++ geek»

C++ geek
275
94
1.1K
9
680
Учим C/C++ на примерах
Подписчики
Всего
3 505
Сегодня
0
Просмотров на пост
Всего
281
ER
Общий
8.02%
Суточный
5.68%
Динамика публикаций
Telemetr - сервис глубокой аналитики
телеграм-каналов
Получите подробную информацию о каждом канале
Отберите самые эффективные каналы для
рекламных размещений, по приросту подписчиков,
ER, количеству просмотров на пост и другим метрикам
Анализируйте рекламные посты
и креативы
Узнайте какие посты лучше сработали,
а какие хуже, даже если их давно удалили
Оценивайте эффективность тематики и контента
Узнайте, какую тематику лучше не рекламировать
на канале, а какая зайдет на ура
Попробовать бесплатно
Показано 7 из 275 постов
Смотреть все посты
Пост от 19.10.2026 11:24
70
0
2
🕵️‍♂️ Анатомия лямбд: Что скрывает компилятор и где прячутся тормоза?

Мы привыкли писать auto func = [x](int y) { return x + y; }; и думать о лямбдах как о «магических» встроенных функциях. Но в C++ нет никакой магии. На уровне компилятора лямбд не существует.

Лямбда-выражение - это просто синтаксический сахар для создания анонимного класса (функтора).

⚙️ Что происходит под капотом?

Когда вы пишете такой код:


int multiplier = 10;
auto doMath = [multiplier](int val) {
return val * multiplier;
};



Компилятор молча генерирует для вас класс с уникальным непроизносимым именем и перегруженным оператором ():


// Примерно это генерирует компилятор:
class __Lambda_Uniq_42 {
int multiplier; // Захваченная переменная стала полем класса
public:
__Lambda_Uniq_42(int m) : multiplier(m) {}

// Сам код лямбды:
auto operator()(int val) const {
return val * multiplier;
}
};

// А ваше создание лямбды превращается в:
auto doMath = __Lambda_Uniq_42(multiplier);



Вывод №1: Блок захвата [...] - это просто конструктор класса и его поля. Если вы захватываете по ссылке [&x], полем класса станет ссылка.

🚨 Где прячутся скрытые аллокации?

Сама по себе лямбда создается на стеке. Никаких new или malloc не происходит. Это работает мгновенно.

Тормоза начинаются, когда мы решаем сохранить лямбду с помощью std::function.


// 🚀 БЫСТРО (Zero-cost)
auto fast_lambda = [a, b, c]() { ... };

// 🐢 МОЖЕТ БЫТЬ МЕДЛЕННО (Heap allocation)
std::function<void()> slow_lambda = [a, b, c, d, e]() { ... };



std::function - это тяжелая обертка (Type Erasure). Она должна уметь хранить любой вызываемый объект с нужной сигнатурой.
Чтобы избежать выделения памяти в куче, в std::function встроена оптимизация для маленьких объектов (SBO - Small Buffer Optimization). Размер этого буфера обычно равен размеру нескольких указателей (например, 16-32 байта).

* Если ваша лямбда захватывает мало данных (или ничего) - она поместится во внутренний буфер std::function. Аллокаций нет.
* Если вы написали [=] и захватили кучу тяжелых переменных (или несколько толстых строк/векторов по значению) - размер сгенерированного класса превысит буфер. std::function будет вынужден вызвать new и выделить память в куче.

💡 Правила чистого кода с лямбдами:

1. Храните через auto: Всегда используйте auto для локальных лямбд. Это бесплатно.
2. Передавайте через шаблоны: Если функция принимает лямбду, лучше сделать её шаблоном template <typename Func> void DoWork(Func f), чем принимать std::function. Шаблон сохранит тип лямбды и позволит компилятору заинлайнить код.
3. Используйте std::function только на границах API: Когда вам действительно нужно хранить функции разного типа в одном контейнере (например, вектор коллбеков) или передать их через границу динамической библиотеки.
4. Не пишите [=] вслепую: Захватывайте только то, что реально нужно. Это спасет и от лишних аллокаций, и от случайного копирования тяжелых объектов.

#cpp #lambdas #optimization #memory #under_the_hood #coding #tips

📲 Мы в MAX

➡️ @cpp_geek
👍 2
🔥 1
Пост от 14.10.2026 10:33
196
0
1
🎥 Вебинар по C++: Магия чисел в C++: как заставить компилятор считать за нас

Программа ещё не запущена, а таблица значений уже готова. C++ позволяет выполнить часть вычислений на этапе компиляции и передать программе готовый результат.

👉 На уроке разберём:
- Как выполнять вычисления на этапе компиляции.
- Как получать числа Фибоначчи и факториал до запуска программы.
- Как поручить компилятору генерацию таблиц.

🤓 Что получите по итогам:
- Поймёте, как компилятор может вычислять результаты ещё при сборке программы.
- Разберёте этот принцип на конкретных задачах: от факториала и чисел Фибоначчи до генерации таблиц.

🧠 Вебинар приурочен к старту курса «C++-разработчик. Продвинутый уровень», который помогает системно усилить навыки: от современных стандартов C++20 и C++23 до проектирования, многопоточности, работы с сетью, базами данных и большими объёмами информации.

👉 Для участия зарегистрируйтесь: https://vk.cc/d2Szzw

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Пост от 13.10.2026 10:20
263
1
3
std::initializer_list

Присваивайте значения контейнерам непосредственно с помощью списка инициализаторов, как это можно делать с C-массивами.

Это справедливо и для вложенных контейнеров. Скажите спасибо С++11.

📲 Мы в MAX

➡️ @cpp_geek
👍 2
❤ 1
🔥 1
🤡 1
Пост от 10.10.2026 10:39
324
0
1
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max.ru/channel_win_sysadmin Системный Администратор Windows
https://max.ru/channel_linux_admin Linux: Системный администратор
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Системный администратор
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)

Excel лайфхак 📌
telemetr.me/Excel_lifehack Excel лайфхак

Английский с нуля 🇬🇧
https://max.ru/UchuEnglish

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://max.ru/channel_DevLab1C 1С:Предприятие 8

Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
https://max.ru/channel_cpp_geek C++ geek

Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика

Программирование React📌
https://max.ru/react_lib React

Программирование Rust📌
https://max.ru/channel_rust_lib

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
https://max.ru/channel_java_geek Java Geek

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии в IT📌
https://max.ru/progjob
https://max.ru/channel_rabotait

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных

Городские📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
https://max.ru/channel_krasnodar_novosty Краснодар Новости
https://max.ru/channel_novosibirsk_novosti Новосибирск
https://max.ru/channel_samara_novosti Новости Самары
https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга
https://max.ru/channel_kazan_novosti Новости Казани
https://max.ru/channel_omsk_novosti Новости Омска
https://max.ru/channel_moskva_24 Москва 24
❤ 1
👍 1
👎 1
🔥 1
🤮 1
Пост от 08.10.2026 07:20
422
1
5
std::hash

Это структура шаблонного класса, определенная в заголовочном файле. Она предоставляет хеш-функцию для хэширования различных типов данных, включая встроенные и пользовательские.

std::hash используется, например, в ассоциативных контейнерах, таких как std::unordered_map и std::unordered_set, для быстрого доступа к элементам по ключу.

Для пользовательского типа данных требуется явная специализация структуры std::hash для корректной работы хэширования.

что и поток, с которым он связан.

📲 Мы в MAX

➡️ @cpp_geek
❤ 3
👍 2
Пост от 06.10.2026 08:55
329
0
3
Что случится, если exception выйдет за пределы потока?

Если exception выходит за пределы потока, то оно не может быть обработано на текущем уровне, т. к. он уже завершен. В таком случае исключение будет зарегистрировано как неперехваченное и может привести к аварийному завершению программы.

Чтобы избежать данной ситуации, необходимо обернуть код, где может возникнуть исключение, в try-catch блок на том же уровне, что и поток, с которым он связан.

📲 Мы в MAX

➡️ @cpp_geek
👍 1
Пост от 29.09.2026 10:30
1
0
0
Dependency Injection

Dependency Injection (DI) — это паттерн проектирования, который позволяет управлять зависимостями между объектами. Он помогает разделить создание объектов от их использования и обеспечить более гибкую и тестируемую архитектуру программы.

В DI объекты получают свои зависимости не напрямую, а через внешний источник, который их предоставляет. Этот источник называется контейнером внедрения зависимостей. Контейнер отвечает за создание и управление зависимостями, а объекты получают их через конструкторы, методы или свойства.

📲 Мы в MAX

➡️ @cpp_geek
Смотреть все посты