cpp_lib | Unsorted

Telegram-канал cpp_lib - Библиотека C/C++ разработчика

2630

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

Subscribe to a channel

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

Инженерный калькулятор на C++. Часть 1: Токенизатор математических выражений

Всем привет! Сегодня хочу поделиться опытом написания консольного инженерного калькулятора, который может посчитать выражение вроде (log2(18)/3.14)*sqrt(0.1*10^(-3)/0.02)

Почему именно калькулятор (ну камон, их же и так тьма тьмущая)? Все потому, что в школе дали задание написать графический калькулятор на Qt; мне это показалось скучным, и я решил поэкспериментировать.

https://habr.com/ru/articles/769812/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

🟡Пройдите тест по С++

Ответьте на 20 вопросов и проверьте, насколько хорошо вы знаете язык. Сможете сдать — пройдёте на продвинутый онлайн-курс "C++ Developer. Professional" со скидкой!

🚀На этом курсе вы:
- Научитесь прикладному применению стандартов C++11 / C++14 / C++17.
- Освоите асинхронное и многопоточное программирование.
- Получите глубокое представление о шаблонной магии и паттернах проектирования.
Наглядным результатом вашей работы станет выпускной проект,

👉🏻ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА ПО C++ https://vk.cc/crSuJu

Реклама. Информация о рекламодателе на сайте otus.ru

Читать полностью…

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

Являются ли указатели функций и виртуальные функции действительно медленными?

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

https://lucisqr.substack.com/p/are-function-pointers-and-virtual

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Model-View-Controller

https://www.modernescpp.com/index.php/model-view-controller

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Шпаргалка по C++

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Язык программирования C++. Краткий курс
Бьёрн Страуструп (2019)

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

Скачать книгу

👉 @cpp_knigi

Читать полностью…

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

Многопоточность и Thread Pool в C++

За время работы в сфере IT у меня появилась своя собственная библиотека на языке C++, которая медленно, но верно обрастает различными полезными модулями. Не все включаемые в нее модули написаны мною с нуля, но я всегда стараюсь так или иначе адаптировать их под свои нужды. Сегодня у меня появилось непреодолимое желание поделиться с вами некоторыми фрагментами моей библиотеки.

https://habr.com/ru/articles/738250/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Шпаргалка по использованию умных указателей в C++

Благодаря наличию исключений, язык C++ позволяет разделить основную логику приложения и обработку ошибок, не мешая их в одну кучу. Что есть очень хорошо. Однако теперь по коду нельзя с уверенностью сказать, где может быть прервано его исполнение. Отсюда возникает опасность утечки ресурсов. Проблема эта решается при помощи деструкторов и идиомы RAII. Впрочем, придерживаться этой идиомы становится проблематично при использовании указателей. Особенно при использовании их не как членов класса, а просто как переменных в методах. На наше с вами счастье, в стандартной библиотеке языка есть умные указатели (smart pointers), придуманные именно для этого случая. Поскольку на C++ я пишу не регулярно, то иногда забываю некоторые нюансы использования умных указателей, в связи с чем решил вот набросать небольшую шпаргалку.

https://telegra.ph/SHpargalka-po-ispolzovaniyu-umnyh-ukazatelej-v-C-10-18

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Интеллектуальные указатели (современный C++)

В современном программировании C++ стандартная библиотека включает смарт-указатели, которые используются для обеспечения того, чтобы программы были свободны от утечки памяти и ресурсов и являются исключениями.

В следующем примере сравниваются объявления необработанного и интеллектуального указателей

void UseRawPointer()
{
// Using a raw pointer -- not recommended.
Song* pSong = new Song(L"Nothing on You", L"Bruno Mars");

// Use pSong...

// Don't forget to delete!
delete pSong;
}


void UseSmartPointer()
{
// Declare a smart pointer on stack and pass it the raw pointer.
unique_ptr<Song> song2(new Song(L"Nothing on You", L"Bruno Mars"));

// Use song2...
wstring s = song2->duration_;
//...

} // song2 is deleted automatically here.


https://learn.microsoft.com/ru-ru/cpp/cpp/smart-pointers-modern-cpp?view=msvc-170


#cpp #programming

👉 @cpp_lib

Читать полностью…

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

TCP/IP сети с помощью Boost.Asio

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

В этом месяце Ричард Томсон продолжит наше знакомство с Boost.Asio рассмотрением сетевых технологий TCP/IP. Мы рассмотрим, как реализовать клиент NNTP (Network News Transport Protocol) с помощью Boost.Asio. NNTP - это линейно-ориентированный протокол для чтения новостных статей usenet. Это даст нам представление обо всех типичных проблемах, связанных с сетевыми приложениями TCP/IP:

- Как преобразовать имя хоста в IP-адрес?
- Как установить долговременное соединение с сервером NNTP?
- Как обрабатывать произвольно большие объемы данных с NNTP-сервера, которые поступают асинхронно?
- Как мы координируем ввод данных пользователем с вводом/выводом NNTP?
- Как мы справляемся с неожиданными сетевыми ошибками?

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Суперклей ABI, или Как применять C++ где угодно

Меня зовут Михаил, я backend-разработчик в SimbirSoft. Время от времени я сталкиваюсь с понятием «двоичный», он же «бинарный» интерфейс приложений, или просто ABI (application binary interface). Все найденные мной материалы на эту тему были либо очень скудны, либо вели к многостраничным эпопеям, которые напоминали сборную солянку из описания, например, архитектуры процессора x86, сдобренную стандартом С++.

Но потом я наткнулся на перевод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. В ней он поднимает вопрос поддержки обратной бинарной совместимости. Значит, вопрос актуальный — это и стало мотивацией для написания этой статьи. В ней я сфокусируюсь на примерах и практике использования С++ в других языках программирования. Материал будет полезен middle+ и senior-разработчикам, а также всем, кто хочет сделать гибкий, долгоживущий, легко настраиваемый под заказчика продукт.

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

https://habr.com/ru/companies/simbirsoft/articles/742486/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

C++ и космические технологии

В сегодняшней публикации мы поговорим о новом новшестве в мире C++ - операторе "спейсшип" (spaceship aka three-way comparison), он же тройное сравнение.

Устраивайтесь поудобнее, взлетаем.

Итак, оператор <=> появился в C++20.

Что же он делает?

Обычный оператор сравнения вроде < берет на вход два значения, тестирует на них корректность заданного бинарного отношения и возвращает булево значение, обозначающее результат проверки.

https://habr.com/ru/articles/766976/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Instant Messaging App in C++

Код-ревью простенького чатика, написанного самим же автором видео.

0:00 - Intro
1:06 - Building the code
2:38 - Running all the projects
7:18 - Project architecture
7:52 - How I write APIs
10:20 - Walnut-Networking API overview
11:49 - Removing external header includes from our own headers
17:50 - What are pointers really
20:00 - Type forward declarations
24:00 - Walnut::Server API and code overview
30:03 - Walnut::Client API and code overview
30:57 - Network utility functions
32:44 - Client connection status

https://github.com/TheCherno/Walnut-Chat


источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Вглубь std::unordered_map: магические числа

Все любители кодокопания заканчивают либо хорошо, либо плохо. Мне повезло. Поэтому я решила написать свою первую статью.

Как всё начиналось
Мой друг игрался со вставкой в unordered_map и заметил странную закономерность в изменении параметра bucket_count с ростом числа элементов в таблице.

https://habr.com/ru/articles/765760/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Блеск и нищета std::format

Сравнительно недавно в stdlib плюсов появилось форматирование строк «как в питоне», а точнее, как в библиотеке fmt. И я, как смелый и отчаянный, решил этим воспользоваться. Возможно, аксакалы и настоящие разработчики скажут, что я всё делаю не так, и вообще не то, но я буду рад такой критике, если она поможет легче жить ;)

Итак, приступим. Вам понадобится свежий компилятор и стдлиб. На cppreference зеленеют красивые надписи (since C++20), круто! 2020-й уже давно прошёл, да и в мейкфайлах/vcxproj мы везде давно ставим --std=c++20, кто посмелее — даже больше. Статьи про std::format выходят уже несколько лет, и даже переводы на хабре есть [1], [2]. Значит, сейчас зафигачим маленький инклюдик, пройдёмся sed -e '...' по исходникам, и всё будет в шоколаде.

https://habr.com/ru/articles/763784/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Как сравнить целые числа со знаком и без знака в C++20?

Сравнение двух чисел должно быть простым, верно? Может быть, и должно, но в языке C++ это не так, даже если ограничить сравнение областью целых чисел.

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

https://www.sandordargo.com/blog/2023/10/11/cpp20-intcmp-utilities

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Опыт создания UI библиотеки на C++

Началось все почти два года назад в декабрe, наш основной проект (видео мессенджер) использовал WTL для Windows и GTKmm для Linux. Поддержки мака не было. Огромной неприятностью было тащить два идентичных клиента, которые, по идее, должны делать все строго одно и тоже. Разумеется, это никогда не получалось. От мысли что надо бы сделать ещё один нативный клиент для мака начинался нервный тик...

На резонный вопрос - почему сразу делалось не на Qt могу лишь ответить, что это связано с, так скажем, гурманскими предпочтениями и, отчасти, с любовью к монолитным exe. Да и не требовалось на старте ничего кроме винды.

https://habr.com/ru/articles/768336/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Сборка мусора: как это делается в системном программировании

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

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

Rus https://habr.com/ru/companies/timeweb/articles/766772/

Eng https://bitbashing.io/gc-for-systems-programmers.html

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

⁉️ Как разработчику попасть в крупный проект?

‼️ Освоить набирающую обороты первую российскую ОС на курсе «Разработка прикладного ПО на Qt и ОС Аврора» от OTUS.

После обучения вы сможете:

✔️ Проектировать и реализовывать приложения на Qt+QML, при необходимости масштабировать и видоизменять их.
✔️ Создавать графические приложение для ОС Аврора на Qt+QML.
✔️ Реализовать приложение, взаимодействующее с системными сервисами ОС Аврора.

❗️Курс создан для разработчиков на C++, разработчиков и архитекторов ПО.

👨‍💻 Обучение состоит из живых лекций с практикующими экспертами, прикладных домашних заданий и создания выпускного проекта для портфолио. Вы можете заранее бесплатно получить полную программу, чтобы убедиться, что она вам подходит!

🎫 Курс доступен для приобретения в рассрочку на специальных условиях.

👉 Пройдите бесплатное вступительное тестирование прямо сейчас и узнайте, готовы ли вы к обучению в OTUS: https://clck.ru/369mDC

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

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

Глубина кроличьей норы: бинарная граница и ABI C++

Вопрос ABI (Application Binary Interface), бинарной границы и бинарной совместимости в C++, раскрыт на просторах интернета не так хорошо как хотелось бы. Особенно сложно в его изучении приходится новичкам, потому что эта тема связана со множеством деталей нарочно скрытой от глаз программиста имплементации языка.

Приправив всё авторскими (и не только) мемами и юморесками за 300, я пострался привнести больше ясности об этой теме в этой статье.

https://habr.com/ru/articles/710658/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Показываем видео в терминале

Приветствую, сегодня я опробую OpenCV, библиотеку для работы с видео, на примере простой задачи - символами ASCII вывести видеоролик в терминал.

Начнем с алгоритма, он вполне интуитивен:
- Загружаем видео
- Покадрово по нему проходимся, пока кадры не закончатся, для каждого кадра:
- Делаем черно-белым
- Скейлим его до нужных нам размеров (размеров консоли)
- Перебираем пиксели слева направо, сверху вниз, для каждого пикселя:
- Получаем его яркость
- Ставим в соответствие его яркости символ, который имеет схожую яркость (более яркий символ - значит содержит в себе больше пикселей)
- Записываем полученный символ в строку для вывода
- Выводим эту строку

https://habr.com/ru/articles/768456/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Реализация алгоритма SHA-256

SHA (Алгоритмы безопасного хеширования) – это семейство криптографических хэш-функций, способных принимать сообщения произвольной длины и вычислять уникальный хэш-код фиксированной длины. Хэш-код SHA может быть использован для проверки целостности сообщения, а также для генерации цифровой подписи сообщения. На данный момент существует несколько стандартов безопасного алгоритма, каждый последующий включает более надёжные хэш-функции.

https://habr.com/ru/articles/729260/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Научитесь пользоваться одним из ключевых преимуществ Rust!

Одна из причин популярности Rust среди программистов – это отсутствие сборки мусора в этом языке, что обеспечивает корректное использование памяти и невероятную производительность. Хотите узнать, как Rust достигает этого?

🔸 Приглашаем 23 октября в 20:00 мск на бесплатный вебинар "Владение и заимствование" от Отус!

Вебинар является бесплатной частью продвинутого онлайн-курса "Rust Developer. Professional". Курс доступен в рассрочку.

✔️ На вебинаре вы узнаете:
– Почему владение и заимствование являются ключевыми понятиями в Rust.
– Как они помогают избегать ошибок и повышать производительность.
– Какие дополнительные ограничения налагаются на программистов в Rust.
– Как принципы владения и заимствования помогают писать надёжный и производительный код на других языках.

➡️ Регистрация на вебинар: https://clck.ru/368Hvd

❗️ Вебинар будет полезен всем, кто интересуется разработкой на любом языке программирования

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

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

decltype

decltype — это ключевое слово, используемое для запроса типа выражения. Оно было введено в C++11 и используется в основном в обобщенном программировании, где часто трудно или даже невозможно определить тип выражения.

Один из примеров использования decltype — это объявление шаблонной функции, тип возвращаемого значения которой зависит от типов аргументов шаблона.

В C++11 можно использовать decltype для конечного возвращаемого типа вместе с ключевым словом auto, чтобы объявить шаблонную функцию, возвращаемый тип которой зависит от типов аргументов шаблона.

В этом примере кода показано, как decltype используется для определения типа выражения. Результат работы этого кода будет зависеть от того, какие значения будут присвоены переменным и какие функции будут вызваны

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Детектор Судного дня или как я разработал датчик радиации для Home Assistant

В начале 2023 года, во многих СМИ появилась информация, что стрелки часов Судного дня перевели на десять секунд. Сейчас они замерли на отметке 90 секунд до полуночи, и теперь часы показывают самый высокий уровень риска ядерной катастрофы за всю историю проекта. Эта информация побудила меня создать устройство для мониторинга фоновой радиации — мог бы написать я, но на самом деле, всё началось гораздо раньше и об этом расскажу далее.

Однажды вечером, в 2015 году, мне захотелось посмотреть статистику фоновой радиации в регионе где я проживаю, зашел на мой любимый проект под названием «Народный мониторинг» и начал искать близлежащие датчики, которые могли бы измерять фоновую радиацию. На моё удивление, я не обнаружил подобных датчиков. Ладно, не беда, сказал я себе, ведь я живу в регионе, где есть государственные предприятия атомной энергетики, на их сайте должна же быть публичная информация об уровне фонового излучения. Зашел на сайт, да, действительно, есть статистика по уровню фонового излучения, где на графике показана прямая линия без намека на динамику, естественно, данный результат меня не устроил и я решил собирать статистику самостоятельно, разработав свое устройство.

https://habr.com/ru/companies/timeweb/articles/767094/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Коллекция библиотек C++ HTTP, включающая простой в использовании HTTP-сервер.

https://cpp.libhunt.com/proxygen-alternatives

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Раскрытие возможностей управления памятью в языке C++

До создания компании Educative я работал в Facebook и Microsoft. Основным направлением моей работы там было использование языка C++. Я изучил язык C++ в самом начале своей карьеры программиста. Однако только работая в Microsoft, я по-настоящему понял, что такое управление памятью в языке C++, и все возможности, которые оно дает.

https://dev.to/fahimulhaq/uncovering-the-power-of-memory-management-in-c-3bm9

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

С++ для начинающих: советы по улучшению кода

Когда только начинаешь свой путь в программировании, бывают моменты, когда понимаешь, что не хватает практических советов от более опытных специалистов. Что нужно делать, а что точно нет? Как улучшить свой код? Мы решили взять на себя эту роль и сдедали для вас подборку с полезными рекомендациями для C++ разработчиков.

00:00 Интро
00:09 Совет 1
00:34 Совет 2
01:00 Совет 3
01:23 Совет 4
01:48 Совет 5
02:21 Совет 6
02:36 Совет 7
03:44 Совет 8
04:54 Заключение

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Минимально жизнеспособный декларативный графический интерфейс на языке C++

https://ossia.io/posts/minimum-viable/

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Hands-On Embedded Programming with C++17
Maya Posch (2019)

Из книги вы узнаете, как можно применять C++ для создания надежных, конкурентоспособных систем, рационально использующих все доступные аппаратные ресурсы.

Вы узнаете, как использовать параллельный режим выполнения, управление памятью и возможности функционального программирования C++ при создании встроенных систем, а также как объединять ваши системы с внешними периферийными устройствами и применять эффективные способы работы с драйверами. В этой книге вы также найдете правила и рекомендации по тестированию и оптимизации кода для улучшения производительности и реализации полезных шаблонов проектирования. Дополнительным преимуществом является подробное описание работы с Qt, широко известной библиотекой графического интерфейса, используемой для создания встроенных систем.

@cpp_knigi

Читать полностью…
Subscribe to a channel