std::vector<std::vector<int> >
с пробелом? Давайте посмотрим, как изменилась работа с типами за 25 лет!//Verbosity nightmare
std::vector<std::pair<std::string, int> > vec; // пробел обязателен!
for (std::vector<std::pair<std::string, int> >::iterator it = vec.begin();
it != vec.end(); ++it) {
// работаем с *it
}
// auto и range-based for
std::vector<std::pair<std::string, int>> vec; // >> теперь OK!
for (auto& item : vec) {
// намного чище!
}
// Не нужно указывать типы
std::vector vec{std::pair{"hello", 42}, {"world", 24}}; // CTAD!
std::optional opt = some_function(); // тип выводится автоматически
// Structured bindings
for (auto [name, value] : vec) {
std::cout << name << ": " << value << "\n";
}
#include <concepts>
template<std::integral T> // Концепты!
auto process(T value) {
return value * 2;
}
// Abbreviated function templates
auto add(std::integral auto a, std::integral auto b) {
return a + b;
}
// if consteval для compile-time проверок
constexpr auto get_value() {
if consteval {
return 42; // compile-time версия
} else {
return expensive_runtime_calc(); // runtime версия
}
}
// Multidimensional subscript operator
matrix[1, 2, 3] = value; // вместо matrix[1][2][3]
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤2
😈 Modules в C++20 - будущее или очередной провал?
5 лет назад: "Modules решат все проблемы! Быстрая компиляция! Настоящая инкапсуляция!"
2025 год: Поддержка модулей все еще экспериментальная, build системы путаются, а простой hello world на модулях собирается в 3 раза дольше классического 😅
🐊 Реальность модулей:
- CMake = beta поддержка
- Legacy код = не портируется
- Compile times = пока что хуже
😡 Парадокс:
Хотели ускорить компиляцию, получили новые проблемы с build системами.
Но справедливости ради - концепция правильная. Проблема в том, что экосистема не готова. Может через 5 лет будет по-другому?
💡 Сравнение:
❓ Вопрос:
Стоит ли уже сейчас изучать modules или подождать еще пару лет?
🔥 Уже использую в пет проектах
⚡️ Изучаю, но не применяю
👾 Жду стабилизации
❤️ Пока что #include рулит
Библиотека C/C++ разработчика #междусабойчик
Modules обещали революцию, а получили головную боль!
5 лет назад: "Modules решат все проблемы! Быстрая компиляция! Настоящая инкапсуляция!"
2025 год: Поддержка модулей все еще экспериментальная, build системы путаются, а простой hello world на модулях собирается в 3 раза дольше классического 😅
- CMake = beta поддержка
- Legacy код = не портируется
- Compile times = пока что хуже
Хотели ускорить компиляцию, получили новые проблемы с build системами.
Но справедливости ради - концепция правильная. Проблема в том, что экосистема не готова. Может через 5 лет будет по-другому?
// Классика: работает везде
#include <iostream>
#include "my_header.h"
// Modules: работает... иногда... если повезет
import std.io;
import my.module;
Стоит ли уже сейчас изучать modules или подождать еще пару лет?
🔥 Уже использую в пет проектах
⚡️ Изучаю, но не применяю
👾 Жду стабилизации
Библиотека C/C++ разработчика #междусабойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤28👾18⚡6🔥3
🔹 Зачем?
Работа с перечислениями (enum) в C++ часто требует дополнительного кода: преобразование в строку, проверка значений, итерация по всем вариантам. Библиотека conjure_enum автоматизирует эту рутину!
🔹 Что умеет?
✅ Генерация to_string() для enum
✅ Проверка валидности значений (is_valid)
✅ Итерация по всем элементам enum
✅ Поддержка enum и enum class
✅ Минимальный оверхед (всё вычисляется на этапе компиляции)
🔹 Пример использования:
#include "conjure_enum.h"
CONJURE_DEFINE_ENUM(Color, Red, Green, Blue)
int main() {
Color c = Color::Green;
std::cout << conjure_enum::to_string(c); // "Green"
std::cout << conjure_enum::is_valid(42); // false
for (Color value : conjure_enum::values<Color>()) { ... }
}
🔹 Плюсы:
✔️ Заголовочный-only (просто подключи conjure_enum.h)
✔️ Не требует C++20 (работает даже на C++11)
✔️ Лёгкая интеграция в существующий код
💡 Кому пригодится?
— Тем, кто устал писать switch-case для enum-ов
— Если нужна удобная отладка (вывод значений в лог)
— Для валидации конфигов/сетевых данных
🔗 Ссылка
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Плюсовики, до конференции Яндекса C++ Zero Cost Conf осталось 9 дней!
Мероприятие о прикладном C++ пройдет в Москве, СПб и Белграде. Вас ждут доклады о внедрении C++20 модулей, текущем статусе и перспективах развития hardening и десятки других выступлений от практикующих C++ экспертов.
Если собираетесь посетить конференцию в Москве, то вас также ждет воркшоп по Perforator, кейс-лаб по надежности микросервисов и код-гольф, где нужно решать задачи на C++, потратив на код как можно меньше символов.
Участие бесплатное, но необходимо зарегистрироваться на сайте до 28 июля!
Мероприятие о прикладном C++ пройдет в Москве, СПб и Белграде. Вас ждут доклады о внедрении C++20 модулей, текущем статусе и перспективах развития hardening и десятки других выступлений от практикующих C++ экспертов.
Если собираетесь посетить конференцию в Москве, то вас также ждет воркшоп по Perforator, кейс-лаб по надежности микросервисов и код-гольф, где нужно решать задачи на C++, потратив на код как можно меньше символов.
Участие бесплатное, но необходимо зарегистрироваться на сайте до 28 июля!
🔥6❤3🤔3👍2
🐕🦺 Пет-проекты в резюме: как превратить фриланс и side-проекты в карьерный козырь
Наверняка каждому джуну была знакома эта ситуация: сидишь ночами, пилишь пет-проект, потом еще один... а когда приходит время собирать резюме, понимаешь — показать нечего. Вернее, проекты-то есть, но непонятно, как их оформить и включить в резюме.
Поэтому сегодня объясним, как оформить свой неформальный опыт в резюме и продать себя в качестве специалиста.
👉 Статья
Библиотека C/C++ разработчика
Наверняка каждому джуну была знакома эта ситуация: сидишь ночами, пилишь пет-проект, потом еще один... а когда приходит время собирать резюме, понимаешь — показать нечего. Вернее, проекты-то есть, но непонятно, как их оформить и включить в резюме.
Поэтому сегодня объясним, как оформить свой неформальный опыт в резюме и продать себя в качестве специалиста.
👉 Статья
Библиотека C/C++ разработчика
⚡1❤1
🤔 «Начни сразу с нейросетей — зачем тебе логрегрессия?»
Это один из худших советов для начинающего ML-разработчика. Зрелость — это понимать, где простого достаточно, а не тянуть трансформеры на любую задачу из-за хайпа.
Классика ML — это не допотопная теория, а база (bias/variance, деревья, метрики), без которой не понять Deep Learning.
⚡️ Хотите освоить этот фундамент на реальных задачах? Приходите на наш курс по классическому ML. Только хардкор, только продовые задачи!
📆 Старт — 12 августа.
Для первых 10 участников бонус — специальный лонгрид по теме курса, чтобы вы могли начать разбираться уже сейчас.
🎁 Последний день промокодаEarlybird на скидку 10.000₽.
👉 Не упустите шанс!
Это один из худших советов для начинающего ML-разработчика. Зрелость — это понимать, где простого достаточно, а не тянуть трансформеры на любую задачу из-за хайпа.
Классика ML — это не допотопная теория, а база (bias/variance, деревья, метрики), без которой не понять Deep Learning.
⚡️ Хотите освоить этот фундамент на реальных задачах? Приходите на наш курс по классическому ML. Только хардкор, только продовые задачи!
📆 Старт — 12 августа.
Для первых 10 участников бонус — специальный лонгрид по теме курса, чтобы вы могли начать разбираться уже сейчас.
🎁 Последний день промокода
👉 Не упустите шанс!
Какое изначальное название носил язык C++?
Anonymous Quiz
4%
Enhanced C
17%
Object C
67%
C with Classes
12%
Advanced C
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
👾 Интересное:
• C++26 улучшает форматирование чисел — статья о предстоящем изменении в std::format
• Эволюция работы с типами в C++: от C++98 до C++23 — историческая справка по работе с типами
😎 Полезное:
• std::chrono — библеотека для работы cо временем
• Обработка ошибок с помощью AI — промпт, который поможет улучшить обработку ошибок
🖨Интересные проекты:
• conjure_enum — библиотека для удобной работы и с перечислениями
Библиотека C/C++ разработчика
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
👾 Интересное:
• C++26 улучшает форматирование чисел — статья о предстоящем изменении в std::format
• Эволюция работы с типами в C++: от C++98 до C++23 — историческая справка по работе с типами
😎 Полезное:
• std::chrono — библеотека для работы cо временем
• Обработка ошибок с помощью AI — промпт, который поможет улучшить обработку ошибок
🖨Интересные проекты:
• conjure_enum — библиотека для удобной работы и с перечислениями
Библиотека C/C++ разработчика
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что выведет программа?
Anonymous Quiz
7%
foobar
11%
barfoo
4%
Неопределенное поведение
63%
foo
14%
Нескомпилируется
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что гарантированно выведет программа в C++17?
Anonymous Quiz
9%
1234
5%
13444
51%
14
19%
1344
16%
Зависит от оптимизаций компилятора
🏖️ Подборка вакансий для C++-разработчиков за неделю
Software Engineer (Humanoid Robots) — 190 000 ₽ Удалёнка
Senior Linux Distro Master — от 5 000 и до 5 500 $ Удалёнка
C++ Разработчик — от 180 000 и до 250 000 ₽ Удалёнка
C++ Developer Middle — 200 000₽ Удалёнка
Разработчик C/C++ (SDN dataplane, DPDK/DOCA API) — от 250 000 и до 400 000 ₽ Удалёнка
Разработчик C++ — от 250 000 и до 400 000 ₽ Удалёнка
Библиотека C/C++ разработчика
Software Engineer (Humanoid Robots) — 190 000 ₽ Удалёнка
Senior Linux Distro Master — от 5 000 и до 5 500 $ Удалёнка
C++ Разработчик — от 180 000 и до 250 000 ₽ Удалёнка
C++ Developer Middle — 200 000₽ Удалёнка
Разработчик C/C++ (SDN dataplane, DPDK/DOCA API) — от 250 000 и до 400 000 ₽ Удалёнка
Разработчик C++ — от 250 000 и до 400 000 ₽ Удалёнка
Библиотека C/C++ разработчика
🙏3👍1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27❤1👍1👏1🥱1
Последний шанс залутать курсы Proglib Academy с выгодой 40% и пожизненным доступом.
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
🥱2❤1😁1
Перегрузка
operator= -
одна из самых коварных тем в C++. Часто приводит к багам.class MyString {
private:
char* data;
size_t length;
public:
// Правильный operator=
MyString& operator=(const MyString& other) {
if (this == &other) return *this; // самоприсваивание
// Создаём временную копию
char* temp = new char[other.length + 1];
strcpy(temp, other.data);
// Освобождаем старые данные
delete[] data;
// Присваиваем новые
data = temp;
length = other.length;
return *this;
}
// Лучше через copy-and-swap
MyString& operator=(MyString other) { // копия по значению
swap(*this, other);
return *this;
}
};
Без проверки самоприсваивания можем удалить данные, которые копируем.
Copy-and-swap никогда не подведёт.
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🥰1
✅ Чек-лист: Оптимизация времени компиляции
Долгая компиляция убивает продуктивность. Ускорьте сборку вашего C++ проекта.
🎯 Структура проекта
✓ Используйте forward declarations вместо
✓ Минимизируйте зависимости в header файлах
✓ Применяйте
✓ Разбивайте большие файлы на модули
🎯 Современные возможности
✓ Переходите на C++20 modules постепенно
✓ Используйте precompiled headers для стабильных зависимостей
✓ Настройте distributed compilation (distcc, Incredibuild)
🎯 Инструменты и настройки
✓ Включите параллельную компиляцию (-j флаг)
✓ Используйте ccache для кеширования результатов
✓ Профилируйте время компиляции с -ftime-trace (Clang)
✓ Настройте incremental linking
Как измерить результат: Замеряйте время полной и инкрементальной сборки регулярно.
Библиотека C/C++ разработчика #буст
Долгая компиляция убивает продуктивность. Ускорьте сборку вашего C++ проекта.
🎯 Структура проекта
✓ Используйте forward declarations вместо
#include
где возможно✓ Минимизируйте зависимости в header файлах
✓ Применяйте
Pimpl idiom
для скрытия деталей имплементации✓ Разбивайте большие файлы на модули
🎯 Современные возможности
✓ Переходите на C++20 modules постепенно
✓ Используйте precompiled headers для стабильных зависимостей
✓ Настройте distributed compilation (distcc, Incredibuild)
🎯 Инструменты и настройки
✓ Включите параллельную компиляцию (-j флаг)
✓ Используйте ccache для кеширования результатов
✓ Профилируйте время компиляции с -ftime-trace (Clang)
✓ Настройте incremental linking
Как измерить результат: Замеряйте время полной и инкрементальной сборки регулярно.
Библиотека C/C++ разработчика #буст
❤6🔥4
🚀 C++17: structured bindings
Structured bindings в C++17 — это не просто красивый синтаксис, это читаемость кода на новом уровне!
Код стал намного читаемее. Особенно полезно при работе с контейнерами пар и функциями, возвращающими несколько значений.
🧠 Используете ли вы structured bindings? В каких случаях они наиболее полезны?
Библиотека C/C++ разработчика #междусобойчик
Structured bindings в C++17 — это не просто красивый синтаксис, это читаемость кода на новом уровне!
// Старый способ (до C++17)
std::map<std::string, int> counts;
for (auto it = counts.begin(); it != counts.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
// C++17 structured bindings
for (const auto& [key, value] : counts) {
std::cout << key << ": " << value << std::endl;
}
// Работает с парами, tuple, массивами
auto [x, y, z] = std::make_tuple(1, 2.5f, "hello");
auto [min, max] = std::minmax({5, 2, 8, 1, 9});
Код стал намного читаемее. Особенно полезно при работе с контейнерами пар и функциями, возвращающими несколько значений.
🧠 Используете ли вы structured bindings? В каких случаях они наиболее полезны?
Библиотека C/C++ разработчика #междусобойчик
👍10🔥8