uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Библиотека C/C++ разработчика

Библиотека C/C++ разработчика

Відкрити в Telegram

Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter

Показати більше
7 192
Підписники
Немає даних24 години
-107 днів
-3030 днів
Архів дописів
Почему C++ считает мой класс копируемым, если его нельзя скопировать? Рассмотрим следующий сценарий: template struct Base { /
Почему C++ считает мой класс копируемым, если его нельзя скопировать? Рассмотрим следующий сценарий:

template<typename T>
struct Base
{
    // Есть конструктор по умолчанию
    Base() = default;

    // Не копируемый
    Base(Base const &) = delete;
};

template<typename T>
struct Derived : Base<T>
{
    Derived() = default;
    Derived(Derived const& d) : Base<T>(d) {}
};

// Это assertion выполняется?
static_assert(
    std::is_copy_constructible_v<Derived<int>>);
Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку:

void example(Derived<int>& d)
{
    Derived<int> d2(d);
    // msvc: error C2280: 'Base<T>::Base(const Base<T> &)':
    //       attempting to reference a deleted function
    // gcc:  error: use of deleted function 'Base<T>::Base(const Base<T>&)
    //       [with T = int]'
    // clang: error: call to deleted constructor of 'Base<int>'
}
Итак, компилятор считает, что Derived<int> копируемый, но когда мы пытаемся его скопировать, выясняется, что это не так! https://habr.com/ru/articles/920202/ #cpp #programming 👉 @cpp_lib

Запись System Level MeetUp. Поток C++ Мы встретились, чтобы поговорить об C++ в системной разработке: обсудить стандарты, подходы и реальные задачи, которые решаются на этом языке. 00:00 - Открытие мероприятия. 08:30 - Доклад "Девиртуализация в C++, компиляторах и вашей программе" (Константин Владимиров и Илья Андреев). 47:50 - Вопросы от участников. 01:00:32 - Доклад "Кодек для json'ов с фиксированной схемой" (Никита Пешаков). 01:27:33 - Вопросы от участников. 01:43:04 - Дискуссия "Как писать меньше на C++?" (Константин Владимиров, Илья Казаков, Алексей Щербаков, Василий Рамаданов). 02:43:06 - Доклад "Реализация динамического полиморфизма для свободных функций" (Кирилл Колодяжный). 03:00:56 - Вопросы участников. 03:11:00 - Доклад "Шаблонное мета-программирование в современном C++ для задач космической баллистики" (Леонид Меркин). 03:59:32 - Вопросы участников. 04:06:05 - Доклад "C++ внутри PostgreSQL: удобство против традиций" (Илья Шишков). 04:46:55 - Вопросы участников. источник #cpp #programming 👉 @cpp_lib

Trip report: June 2025 ISO C++ standards meeting (Sofia, Bulgaria) Сегодня — поворотный момент в истории C++: всего несколько
Trip report: June 2025 ISO C++ standards meeting (Sofia, Bulgaria) Сегодня — поворотный момент в истории C++: всего несколько минут назад комитет по стандартизации C++ проголосовал за включение первых семи документов по отражению во время компиляции (compile-time reflection) в черновик стандарта C++26 — под продолжительные аплодисменты в зале. Думаю, лучше всего значение этой функции выразила Хана «Мисс Констэкспр» Дусикова несколько дней назад, в своей привычной спокойной и невозмутимой манере... когда ей сказали, что документ по reflection попадёт на голосование в субботу, она слегка пожала плечами и тихо сказала: «Совершенно новый язык». https://herbsutter.com/2025/06/21/trip-report-june-2025-iso-c-standards-meeting-sofia-bulgaria/ статья от 2025-06-21 #cpp #programming 👉 @cpp_lib

FastCGo: как мы ускорили вызов C-кода в Go в 16,5 раза Всем привет! Меня зовут Владимир Пустовалов, я C++ разработчик в коман
FastCGo: как мы ускорили вызов C-кода в Go в 16,5 раза Всем привет! Меня зовут Владимир Пустовалов, я C++ разработчик в команде Deckhouse компании «Флант». Мои коллеги — DevOps-инженеры — на данный момент обслуживают более 600 кластеров, и, естественно, в каждом из них развёрнута система мониторинга. Изначально мы использовали Prometheus — опенсорсную систему мониторинга, написанную на Go. По нашей статистике, она занимала около 20 % ресурсов каждого кластера. Мы не могли с этим мириться и поэтому разработали проект под названием Prom++, в котором многократно сократили потребление оперативной памяти и снизили нагрузку на центральный процессор. Кратко о том, что мы сделали: переписали на С++ ядро хранения и обработки горячих данных, при этом вся оркестрация и периферия остались в Prometheus на Go, что позволило сохранить полную совместимость с Prometheus. Для частых вызовов кода C++ мы использовали механизм CGo, однако первые тесты показали, что производительность CPU практически не улучшилась из-за медлительности CGo. В итоге мы переписали CGo, создав собственный механизм вызова. Что будет в этой статье: Разберём, что такое CGo и почему он медленный. Создадим простой собственный механизм CGo-вызова. Доведём этот механизм до полноценного решения. https://habr.com/ru/companies/flant/articles/923912/ #cpp #programming 👉 @cpp_lib

#cpp #programming 👉 @cpp_lib
#cpp #programming 👉 @cpp_lib

Сегментация памяти в программе на C/C++ #cpp #programming 👉 @cpp_lib

RAII 2.0: RAII как архитектурный инструмент в C++ Идиома RAII — давно зарекомендовал себя как удобный способ автоматического
RAII 2.0: RAII как архитектурный инструмент в C++ Идиома RAII — давно зарекомендовал себя как удобный способ автоматического управления ресурсами в C++. Обычно мы применяем его для управления памятью, файловыми дескрипторами или мьютексами. Однако что, если расширить понятие RAII до управления не только физическими ресурсами, но и логическими контрактами и состояниями системы? В этой статье я хочу поговорить о том, как RAII можно использовать для контроля жизненного цикла асинхронных операций, транзакций или подписок, гарантируя их корректное завершение или откат до прежнего состояния. https://habr.com/ru/articles/901092/ #cpp #programming 👉 @cpp_lib

Удобный способ работы с перечислениями в C++ — приведение enum к строке и обратно. Во многих проектах используется enum, чтобы задать ограниченный набор значений. Но как вывести значение enum в лог? Или, наоборот, прочитать из строки и получить нужное значение enum? C++ сам по себе не умеет конвертировать enum в строку и обратно. Вот простая реализация этого функционала через std::unordered_map:

enum class LogLevel {
    Debug,
    Info,
    Warning,
    Error
};

const std::unordered_map<LogLevel, std::string> LogLevelToString = {
    {LogLevel::Debug, "Debug"},
    {LogLevel::Info, "Info"},
    {LogLevel::Warning, "Warning"},
    {LogLevel::Error, "Error"},
};

const std::unordered_map<std::string, LogLevel> StringToLogLevel = {
    {"Debug", LogLevel::Debug},
    {"Info", LogLevel::Info},
    {"Warning", LogLevel::Warning},
    {"Error", LogLevel::Error},
};

std::string to_string(LogLevel level) {
    return LogLevelToString.at(level);
}

LogLevel to_log_level(const std::string& str) {
    return StringToLogLevel.at(str);
}
Такой подход хорошо работает, если enum не слишком большой. Если значений много — можно автоматизировать генерацию через макросы или использовать библиотеки вроде magic_enum. #cpp #programming 👉 @cpp_lib

Лаконичный макрос defer для C++17 Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное з
Лаконичный макрос defer для C++17 Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода. Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС. https://habr.com/ru/articles/916732/ #cpp #programming 👉 @cpp_lib

Низкоуровневый скриптинг на C++ для игровых движков Я постарался охватить только основы, но текст всё равно получился очень длинным. libriscv — это зрелый эмулятор RISC-V, который в настоящее время используется в игровых движках. Насколько мне известно, это единственный эмулятор, в котором основной акцент делается на обработке задержек, а также предоставляются специализированные решения и инструменты для выполнения быстрых вызовов при обращении с функциями — как входящих, так и исходящих. Причём, всё это заключено в безопасной песочнице. Задержки, наблюдаемые в libriscv, гораздо ниже, чем в эталонных эмуляторах. Меня многие спрашивали, как им пользоваться, но здесь интереснее то, как вообще может прийти в голову мысль писать скрипты на C++ — не слишком ли сложно это будет? Оказывается, нет, не очень. Вот уже несколько лет я пишу на C++ скрипты для одной большой и одной не очень большой игры, и меня почти не посещало ощущение, что виной каким-то возникающим при этом проблемам являются язык C++ или связанные с ним скриптовые API. Я много лет программирую на Lua, а до этого пользовался обычным C. Но сейчас современный идиоматический C++ — то, что мне нужно. Причём, я могу писать на этом языке как в самом игровом движке, так и за его пределами, при этом опираясь (буквально) на одни и те же абстракции и оперируя одинаковыми структурами данных. Наконец, C++ просто очень мощный. Правда, я признаю, что о вкусах не спорят, и при работе с C++ также не обойтись без компромиссов. https://habr.com/ru/articles/919620/ #cpp #programming 👉 @cpp_lib

🚀 Подборка Telegram каналов для программистов Системное администрирование, DevOps 📌 https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 https://t.me/razrab_1C 1C Разработчик https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт https://t.me/rabota1C_rus Вакансии для программистов 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Big Data, Machine Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста https://t.me/lifeproger Жизнь программиста. Авторский канал. QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике https://t.me/matgeoru Математика | Геометрия | Логика Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

Пишем игру для игровой ретро-консоли Anbernic на C++ Дисклеймер Сразу скажу, что почти всё, что описано в этой статье, я дела
Пишем игру для игровой ретро-консоли Anbernic на C++ Дисклеймер Сразу скажу, что почти всё, что описано в этой статье, я делал первый раз в жизни, поэтому я не мог не совершить ошибок. Некоторые мои решения и заявления могут быть некорректными. Воспринимать эту статью как туториал можно только на свой страх и риск. Для нормального восприятия этой статьи вы должны обладать базовыми навыками программирования на C++ и хотя бы общим представлением о том, что из себя представляет операционная система Linux. Как всё начиналось Не так давно ко мне в руки попала игровая консоль Anbernic RG35XX SP. Это портативная игровая консоль на базе четырёхъядерного процессора Allwinner H700 с ядрами Cortex-A53, которая имеет на борту операционную систему OFW (дистрибутив Linux, основанный на Ubuntu). Консоль предназначена для запуска ретро игр на эмуляторе Retroarch. Этот эмулятор поддерживает эмуляцию множества популярных игровых консолей 90х и 2000х и позволяет запускать ТЫСЯЧИ популярных игр, которые можно устанавливать на SD карточку. https://habr.com/ru/articles/897338/ #cpp #programming 👉 @cpp_lib

Как заставить шаблоны компилироваться быстро и выглядеть опрятно Павел Сухов Каждый раз при наборе ключевого слова template у меня за плечом магическим образом появляется какой-то коллега и задает стандартные вопросы: — Это же будет долго компилироваться? — Это же будет нечитабельно, мы не сможем это поддерживать? — Там же будут отвратительные ошибки компиляции, которые мы разберем только консилиумом буддийских монахов? И все эти вопросы повторяются раз за разом. Компилируется долго не все, а то, что компилируется долго, — зачастую можно ускорить. Писать шаблоны можно по-разному, кое-что можно написать красиво, емко и наглядно. Да и ошибки можно причесать новыми инструментами современного С++. В докладе — некоторые идеи по поводу медленных и сложных шаблонов, идеи по их ускорению, и развенчание некоторых мифов. источник #cpp #programming 👉 @cpp_lib

📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках стар
📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных». ✔️ На этом вебинаре мы завершим создание архиватора, добавив алгоритм LZ77/78. Разберем принцип словарного сжатия, механизм поиска повторяющихся последовательностей и формат их кодирования. ✔️ Имплементируем выбранный алгоритм и проведем финальное сравнение всех трех методов сжатия (RLE, Huffman, LZ77/78). Определим, какие алгоритмы лучше работают для различных типов файлов и почему. Завершающее практическое занятие для тех, кто хочет освоить продвинутые алгоритмы и увидеть их применение в реальном проекте.​​​​​​​​​​​​​​​​ 🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5 👉 Регистрация на вебинар: https://vk.cc/cMXv29 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Улучшите читаемость и надежность кода на C++: узнайте основы эффективного рефакторинга ⏺️ На открытом уроке вы научитесь двум
Улучшите читаемость и надежность кода на C++: узнайте основы эффективного рефакторинга ⏺️ На открытом уроке вы научитесь двум мощным приемам дизайна ПО: декомпозиции и абстрагированию. ▸ Мы покажем, как с их помощью улучшить производительность, сохраняя при этом ключевой принцип C++: zero overhead. ▸ Вместе с вами выполним рефакторинг небольшого приложения и повысим его читаемость и тестируемость. ❗️ В результате вы получите практические навыки, которые сможете сразу применить в своей работе. Это поможет вам улучшить кодовую базу проекта и сделать его более надежным и удобным для разработки. Посетите открытый урок в преддверие старта курса «C++ Developer» и получите скидку на обучение! 🔴 Встречаемся 19 июня в 20:00 МСК. Регистрируйтесь прямо сейчас, чтобы не пропустить: https://vk.cc/cMTUi6 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Руководство по сборке Qt под Windows из исходников с MinGW Официальный способ установки готовых бинарников Qt - через онлайн
Руководство по сборке Qt под Windows из исходников с MinGW Официальный способ установки готовых бинарников Qt - через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator. https://habr.com/ru/articles/917252/ #cpp #programming 👉 @cpp_lib

Отсутствие динамической аллокации в embedded мире Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими ф
Отсутствие динамической аллокации в embedded мире Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti. Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти. Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено В результате приходится решать задачу «ручного» управления памятью. https://habr.com/ru/articles/918122/ #cpp #programming 👉 @cpp_lib

Ищем Middle C++/ QML разработчик в команду Android 2ГИС Твоя зона ответственности — всё, что пользователь видит и трогает в п
Ищем Middle C++/ QML разработчик в команду Android 2ГИС Твоя зона ответственности — всё, что пользователь видит и трогает в приложении 2ГИС на Android.UI, взаимодействие с core-SDK, логика поверх API — если это на экране, значит это мы. Что делаем: — UI и механика Android-приложения — интеграция с Java/Kotlin и нативными SDK — бизнес-логика на C++ поверх core— проектирование архитектуры— фиксим, оптимизируем, покрываем тестами Команда: 20 разработчиков 3-недельные спринтывнутренние метапы, хакатоны, пятничные онлайн-чаепитияи, конечно, забота о 20+ млн пользователей Наш стек: C++20 • Qt • QML • Java/Kotlin (интеграции)Многопоточность, UI, архитектура, автотесты — всё как ты любишь. Что важно: — 3+ года на C++ — Опыт с QML - обязательно от 2-х лет — уверенность в многопоточке — умение оценивать и декомпозировать задачи — готовность к кросс-функциональному взаимодействию Условия: Удалёнка или офис (на выбор) ДМС, телемедицина, тимтусы, поездки в горы, 2FEST, митапы, хакатоны, всё по классике Хочешь делать интерфейс, которым пользуются миллионы каждый день? 👉 Откликайся

Чтение-копирование-обновление (RCU) Чтение-копирование-обновление эффективно в многопоточных средах, где структура данных поч
Чтение-копирование-обновление (RCU) Чтение-копирование-обновление эффективно в многопоточных средах, где структура данных почти исключительно читается, но редко записывается. https://www.modernescpp.com/index.php/read-copy-update-rcu/ #cpp #programming 👉 @cpp_lib

Электронная картина с автонастройкой яркости на C++/Qt Всю свою жизнь я обходил самоделки. Не привлекало, да и на непосредств
Электронная картина с автонастройкой яркости на C++/Qt Всю свою жизнь я обходил самоделки. Не привлекало, да и на непосредственной работе вполне хватало сложных программистских и инженерных задач. Но любовь к сыну сподвигла взяться за один DIY-проект. Дело в том, что я давно люблю и ценю изобразительное искусство. И также люблю изучение истории (и вообще считаю, что не программированием единым должен жить человек). И я подумал, что изучение истории и живописи можно слить в единый флакон – будет и не скучно, и полезно. Особенно полезно подрастающему школьному и дошкольному поколению. Я захотел электронную картину – чтобы выглядела как картина, а изображения бы настраивались мной, автоматически сменяясь по таймеру. Каждый день – новая картина. Каждый день – повод обсудить с сыном, как видели этот мир художники 200, 300, 500 лет назад, и вообще, а что это за разновидность палаша, аркебузы или фрегата запечатлел здесь художник. А здесь какое важное для мировой истории событие показано? https://habr.com/ru/articles/895768/ #cpp #programming 👉 @cpp_lib