Библиотека C/C++ разработчика | cpp, boost, qt
20.4K subscribers
1.75K photos
47 videos
16 files
3.94K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🧨 C++26 улучшает форматирование чисел

«Почему std::to_string выводит -0.000000 вместо -1e-7? И как C++26 это исправляет!» — такие вопросы часто возникают у разработчиков, работающих с форматированием чисел в C++.


💡 В статье рассматриваются ключевые улучшения std::format в C++26, которые делают работу с форматированием более безопасной, удобной и предсказуемой.

Ключевые моменты статьи:

• Замена sprintf на std::format в std::to_string для более точного вывода чисел;
• Компиляция проверок типов в std::format, что уменьшает количество runtime-ошибок;
• Новые возможности форматирования указателей, включая нулевое заполнение и выбор регистра.

Основной фокус — на практических улучшениях, которые уже доступны в GCC, Clang и MSVC, и их влиянии на существующий код.

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

Вы узнаете, как простые изменения в C++26 могут сэкономить ваше время и избавить от скрытых багов, связанных с локалями и неочевидным поведением старых функций. И это только первая часть обновлений — впереди ещё больше улучшений!

👉 Статья


Библиотека C/C++ разработчика
🤩31🙏1
✏️ Промпт дня: Улучшение обработки ошибок

Обработка ошибок — один из самых критичных аспектов разработки на C++. Неправильная обработка исключений может привести к утечкам памяти, неопределенному поведению и краху приложения.


☀️ Решение с помощью AI

Для улучшения системы обработки ошибок в вашем коде используйте следующий промпт:

How can I improve the error handling in my C++ code? [ВАШ КОД]



🧋 Пример трансформации

До:

int divide(int a, int b) {
return a / b; // Деление на ноль = краш
}

std::vector<int> readFile(const std::string& filename) {
std::ifstream file(filename);
std::vector<int> data;
int value;
while (file >> value) {
data.push_back(value);
}
return data; // Что если файл не открылся?
}



После (с улучшенной обработкой ошибок):

#include <stdexcept>
#include <optional>

std::optional<int> divide(int a, int b) {
if (b == 0) {
return std::nullopt;
}
return a / b;
}

std::vector<int> readFile(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) {
throw std::runtime_error("Cannot open file: " + filename);
}

std::vector<int> data;
int value;
while (file >> value) {
data.push_back(value);
}

if (file.bad()) {
throw std::runtime_error("Error reading file: " + filename);
}

return data;
}


✏️ Как часто в вашем коде встречаются необработанные ошибки? Пишите в комментариях.

Библиотека C/C++ разработчика #буст
👍31🤔1
🍪 Как эволюционировала работа с типами в C++: от C++98 до C++23

🌳 Помните времена, когда приходилось писать std::vector<std::vector<int> > с пробелом? Давайте посмотрим, как изменилась работа с типами за 25 лет!


✏️ Пошаговая эволюция:

1️⃣ C++98 - Боль и страдания

//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
}


2️⃣ C++11 - Первые облегчения

// auto и range-based for
std::vector<std::pair<std::string, int>> vec; // >> теперь OK!
for (auto& item : vec) {
// намного чище!
}


3️⃣ C++17 - Магия template argument deduction

// Не нужно указывать типы
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";
}


4️⃣ C++20 - Concepts и constraints

#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;
}


5️⃣ C++23 - Еще больше удобства

// 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]



💔 Частые ошибки:

Злоупотребление auto: auto x = 5u; может быть неочевидным
Явные типы для API: std::uint32_t count = get_count();

Игнорирование concepts: старые template error messages
Используйте standard concepts: std::integral, std::floating_point

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥102
😈 Modules в C++20 - будущее или очередной провал?

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 или подождать еще пару лет?

🔥 Уже использую в пет проектах
⚡️ Изучаю, но не применяю
👾 Жду стабилизации
❤️ Пока что #include рулит

Библиотека C/C++ разработчика #междусабойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
27👾186🔥3
✏️ conjure_enum: легковесное перечисление C++20


🔹 Зачем?

Работа с перечислениями (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
🔥91
This media is not supported in your browser
VIEW IN TELEGRAM
Плюсовики, до конференции Яндекса C++ Zero Cost Conf осталось 9 дней!

Мероприятие о прикладном C++ пройдет в Москве, СПб и Белграде. Вас ждут доклады о внедрении C++20 модулей, текущем статусе и перспективах развития hardening и десятки других выступлений от практикующих C++ экспертов.

Если собираетесь посетить конференцию в Москве, то вас также ждет воркшоп по Perforator, кейс-лаб по надежности микросервисов и код-гольф, где нужно решать задачи на C++, потратив на код как можно меньше символов.

Участие бесплатное, но необходимо зарегистрироваться на сайте до 28 июля!
🔥63🤔3👍2
🐕‍🦺 Пет-проекты в резюме: как превратить фриланс и side-проекты в карьерный козырь

Наверняка каждому джуну была знакома эта ситуация: сидишь ночами, пилишь пет-проект, потом еще один... а когда приходит время собирать резюме, понимаешь — показать нечего. Вернее, проекты-то есть, но непонятно, как их оформить и включить в резюме.

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

👉 Статья

Библиотека C/C++ разработчика
11
🤔 «Начни сразу с нейросетей — зачем тебе логрегрессия?»

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

Классика ML — это не допотопная теория, а база (bias/variance, деревья, метрики), без которой не понять Deep Learning.

⚡️ Хотите освоить этот фундамент на реальных задачах? Приходите на наш курс по классическому ML. Только хардкор, только продовые задачи!

📆 Старт — 12 августа.

Для первых 10 участников бонус — специальный лонгрид по теме курса, чтобы вы могли начать разбираться уже сейчас.

🎁 Последний день промокода Earlybird на скидку 10.000₽.

👉 Не упустите шанс!
Какое изначальное название носил язык 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++-разработчиков за неделю

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
Последний шанс залутать курсы Proglib Academy с выгодой 40% и пожизненным доступом.

До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.

Выбираем и забираем 👈

P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
🥱2😁1
Media is too big
VIEW IN TELEGRAM
🚀 YADRO приглашает C++ разработчиков в команду OpenBMC и встроенных систем!

Если вы хотите создавать сложное программное обеспечение для серверов и систем хранения данных, работать с передовыми технологиями Linux и участвовать в проектах open source, то эта возможность для вас.

📌 Кого мы ищем:

• Ведущего разработчика C++ (Linux/OpenBMC)
• Ведущего разработчика интерфейсов встроенных систем
• TeamLead разработки OpenBMC

🧰 Технологический стек и задачи:

• C++ (стандарты 17, 20, 23), STL, Boost
• Linux-среда, systemd, D-Bus, Yocto, bash, Python
• Работа с ядром прошивки OpenBMC, взаимодействие с UEFI/BIOS
• Разработка и поддержка сложных интерфейсов встроенных систем

💼 Условия работы:

• Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске
• Работа с масштабными проектами в уникальной команде инженеров
• Возможность горизонтального и вертикального карьерного роста

💙 Узнайте больше и откликайтесь на вакансии прямо на сайте!
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍5