Go-like каналы на C++
Каналы (channels, pipes) – это удобная абстракция для построения приложений, работающих в многопоточной среде. Они используются для передачи сообщений между потоками и, одновременно с этим, как средство синхронизации потоков. Я буду ссылаться на "Go-style channels", т.к. на мой взгляд, важная особенность каналов в языке GO – это возможность их мультиплексировать.
Реализации каналов на языке C++, конечно же, есть, например, в библиотеке boost::fibers, можно найти реализацию двух видов каналов. В документации boost::fibers можно найти описания способов мультиплексирования, правда не самих каналов, но и к ним можно применить подобную технику.
https://habr.com/ru/articles/805561/
#cpp #programming
👉 @cpp_lib
Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
Ответ:
⚫️Явное приведение типов в C++ происходит, когда программист явно указывает, что значение одного типа должно быть преобразовано в значение другого типа. Это делается с помощью операторов приведения типов, таких как static_cast
, dynamic_cast
, const_cast
и reinterpret_cast¹
.
⚫️Неявное приведение типов в C++ происходит автоматически, когда компилятор обнаруживает, что значение одного типа используется в контексте, где ожидается значение другого типа. Например, если вы пытаетесь присвоить значение типа int переменной типа double
, компилятор автоматически преобразует значение int
в значение double⁴
.
⚫️Ключевое слово explicit
используется для предотвращения неявных преобразований¹. Оно может быть использовано с конструкторами и функциями преобразования для указания того, что они не могут использоваться для неявных преобразований и копирования инициализации.
⚫️Например, если у вас есть класс с конструктором, который принимает один аргумент, вы можете использовать ключевое слово explicit, чтобы предотвратить неявное преобразование аргумента в объект вашего класса. Это может быть полезно, если вы хотите избежать ошибок, связанных с неожиданными неявными преобразованиями.
⚫️Вот простой пример использования ключевого слова explicit с конструктором: class MyClass {
public:
explicit MyClass(int x) : m_x(x) {}
private:
int m_x;
};
int main() {
MyClass a = 5; // Ошибка: неявное преобразование запрещено
MyClass b(5); // ОК: явное преобразование
}
⚫️В этом примере конструктор класса MyClass
объявлен как explicit
, поэтому он не может использоваться для неявного преобразования значения int
в объект класса MyClass
. Попытка сделать это вызывает ошибку компиляции. Однако вы все еще можете использовать конструктор для явного преобразования значения int
в объект класса MyClass
, как показано в строке с объявлением переменной b
.
#cpp #programming
👉 @cpp_lib
Хотите изучить C++ с нуля или задумываетесь о переходе на него?
Ждём вас на открытом практическом уроке «Функции, стек и рекурсия в C++» от OTUS, где мы:
- поговорим о том, как реализован вызов функции;
- узнаем, что из себя представляет стек и как он задействован в этом процессе;
- обсудим способы передачи параметров в функцию в C++ и поймем, почему их так много;
- познакомимся с рекурсивными функциями, решая классическую задачу о Ханойских башнях;
- узнаем, почему обычно стоит избегать активного использования рекурсии.
Спикер Андрей Рыжиков — опытный разработчик в НИИ обработки аэрокосмических изображений.
⏰ Встречаемся 4 июня в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.
Крупнейший образовательный центр «Алабуга Политех» приглашает освоить профиль «Аэронавигация и программирование БПЛА» для выпускников 9-11 классов Обучение проходить по дуальной системе:✈️
работа + обучение в колледже.
✅ бесплатное обучение
✅ зарплата до 160 000 рублей
✅ проживание в современных ЖКС
Студенты официально трудоустраиваются и оттачивают свои навыки на высокотехнологичном производстве под руководством опытных инженеров-наставников.
✅ Подавай заявку на поступление в «Алабуга Политех».
Simple Term Colors
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Структурированная диагностика в новом окне сведений о проблеме
Многочисленные ошибки компилятора, в которых, кажется, невозможно разобраться, - бич многих разработчиков C++. Инструменты должны предоставлять лучший опыт, чтобы помочь вам понять диагностику и понять, как исправить корень проблемы.
https://devblogs.microsoft.com/cppblog/structured-diagnostics-in-the-new-problem-details-window/
#cpp #programming
👉 @cpp_lib
Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳
Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы.
Тебя ждет всего три шага:
1️⃣ Пройди тест
После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний!
2️⃣ Реши кейс
Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей.
3️⃣ Стань победителем
Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством.
Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow
Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8KCnBz
📚C++: Simple and Effective Tips and Tricks to learn C++ Programming Effectively
Автор: Benjamin Smith (2020)
Надоело искать среди множества учебников простое и удобное для чтения руководство? Программистский жаргон и неполные объяснения концепций замедляют обучение? Если вы ищете справочник, в котором освещаются фундаментальные и ключевые компоненты программирования на C++, эта книга отлично подойдет.
#cpp #programming
👉 @cpp_lib
Друзья! Курс «Реверсивный инжиниринг ПО под ОС Windows» начинается 3 июня. Скидка 10% по промокоду VESNA10 при оплате до 31 мая.
В курсе подробно рассматривается синтаксис Ассемблера, анализ приложений различного уровня сложности, от простейших crackme до полноценных программ на современных архитектурах.
Необходимые знания: язык Ассемблера, С/С++, python, навыки работы с IDA и другими инструментами для реверса
ВЫ ПОЛУЧИТЕ:
- Сертификат/удостоверение о повышении квалификации
- Сопровождение и поддержку Академии Кодебай
- Возможности трудоустройства/стажировки
Пишите нам @Codeby_Academy
или звоните +74994441750
Подробнее о курсе → здесь
🚀 Начинаете свой путь в разработке на С++?
Ждём вас на открытом практическом уроке «Шаблоны в С++ и основы метапрограммирования» от OTUS, где мы разберем:
- мощный инструмент создания и настройки типов во время компиляции с помощью шаблонов в C++;
- как шаблоны обогащают функциональность языка и улучшают процесс разработки;
- ответы на все возникающие вопросы.
Спикер Евгений Пальчуковский — разработчик с большим международным опытом в финтехе.
⏰ Встречаемся 28 мая в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: РЕГИСТРАЦИЯ
dlib C++ library
Dlib - это современный инструментарий C++, содержащий алгоритмы машинного обучения и инструменты для создания сложного программного обеспечения на C++ для решения реальных задач.
https://github.com/davisking/dlib
#cpp #programming
👉 @cpp_lib
Алгоритмы диапазонов C++20 — 7 немодифицирующих операций
https://www.cppstories.com/2022/ranges-alg-part-one/
#cpp #programming
👉 @cpp_lib
🟢 Начинаете свой путь в разработке на С++?
Ждём вас на открытом практическом уроке «Шаблоны в С++ и основы метапрограммирования» от OTUS, где мы разберем:
- мощный инструмент создания и настройки типов во время компиляции с помощью шаблонов в C++;
- как шаблоны обогащают функциональность языка и улучшают процесс разработки;
- ответы на все возникающие вопросы.
Спикер Евгений Пальчуковский — разработчик с большим международным опытом в финтехе.
⏰Встречаемся 28 мая в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: РЕГИСТРАЦИЯ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Многообразие связных списков
Связный список — классическая структура данных, которая позволяет быстрые вставки/удаления, но при этом просаживает другие операции (случайный доступ к элементу). Мы пройдёмся от базовой реализации до других возможных вариаций этой структуры данных и, надеюсь, вместе узнаем что-то новое. Краем глаза увидим возможные применения связных списков. И в конце, для любителей C++, бонус: использование связного списка для сбора диагностики использования динамической памяти в вашем коде.
https://habr.com/ru/articles/814955/
#cpp #programming
👉 @cpp_lib
[ C++ ] Raft Consensus Algorithm -- Leader Election
https://www.youtube.com/watch?v=Kpls7EDjCTY
https://raft.github.io/
#cpp #programming
👉 @cpp_lib
Примеры исходного кода C++
Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.
https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html
#cpp #programming
👉 @cpp_lib
📚C++ High Performance for Financial Systems: Build efficient and optimized financial systems by leveraging the power of C++
Автор: Ariel Silahian (2024)
Краеугольным камнем этой книги является освещение вопросов проектирования и архитектуры систем. Книга начинается с описания роли C++ в финансах и трейдинге. Вы узнаете о принципах и методологии построения систем, способных обрабатывать огромные объемы данных, с легкостью выполнять сложные торговые стратегии и поддерживать высочайший уровень надежности. Вооружившись этими знаниями, вы сможете справиться даже с самыми сложными торговыми сценариями.
#cpp #programming
👉 @cpp_lib
Regular expressions library (since C++11)
Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках. #include <iostream>
#include <iterator>
#include <regex>
#include <string>
int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";
std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex))
std::cout << "Text contains the phrase 'regular expressions'\n";
std::regex word_regex("(\\w+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();
std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words\n";
const int N = 6;
std::cout << "Words longer than " << N << " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N)
std::cout << " " << match_str << '\n';
}
std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout << new_s << '\n';
}
https://en.cppreference.com/w/cpp/regex
#cpp #programming
👉 @cpp_lib
Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?
Так уж сложилось, что в языке C и C++ для оператора присваивания используется символ =, а для сравнения ==. Как следствие, возможны опечатки, когда вместо сравнения пишут = и получают компилируемый, но неправильно работающий код.
https://habr.com/ru/companies/pvs-studio/articles/818215/
#cpp #programming
👉 @cpp_lib
Высокотехнологичная компания YADRO в поиске тех, кто программирует на C и С++ 🔍
Актуальные вакансии:
1️⃣ Software Engineer C/C++
2️⃣ Senior C++ developer/Старший инженер-программист С++
3️⃣ Старший/ведущий инженер-программист встраиваемых интерфейсов
4️⃣ Linux Kernel Developer (Linux/WebUI) /Инженер-разработчик C (risc-V)
Ты сможешь реализовывать себя и стать частью команды специалистов, которые создают технологические решения и инновации мирового уровня.
Что ещё тебя ждёт:
– достойная зарплата (размер обсуждается на собеседовании) и прозрачная система премий;
– обучение за счёт компании: учебный портал с курсами и лекциями от экспертов, дополнительное профессиональное обучение, изучение английского, участие в конференциях;
– возможность учиться у лучших специалистов индустрии, расти в рамках своей роли, а также участвовать во множестве различных проектов;
– личное участие в становлении процессов и продуктов, возможность увидеть результат своей работы;
– большое инженерное сообщество, которое постоянно развивается;
– гибридный или удалённый формат работы;
– ДМС со стоматологией с первого дня, консультации юристов, психологов, экспертов по ЗОЖ и управлению финансами;
– скидки для сотрудников, дополнительные day-off;
– комфортные офисы в Москве, Санкт-Петербурге, Нижнем Новгороде и Минске.
Откликайся по ссылкам и присоединяйся к YADRO!
Как добавить non-copyable и non-movable объект в std::map или std::unordered_map struct weird
{
int value;
std::mutex mtx;
};
std::map<int, weird> table;
table.insert({ 1, {} }); // nope
table.insert_or_assign(1, weird{}); // nope
table.emplace({ 1, {} }); // nope
table.emplace(1, weird{}); // nope
table.try_emplace(1, weird{}); // nope
https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916
#cpp #programming
👉 @cpp_lib
Алгоритмы на С/С++
Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка
источник
#cpp #programming
👉 @cpp_lib
[C++] Регулярные выражения regex_match
Часть 1 - Введение в регулярные выражения и regex_match
Часть 2 - Практическое применение регулярных выражений и regex_search, regex_replace.
источник
#cpp #programming
👉 @cpp_lib
Введение в регулярные выражения в современном C++
Регулярные выражения (Regular expressions или, вкратце, regex — регулярки) — это пока что непопулярная и недооцененная тема в современном C++. Но в то же время разумное использование регулярных выражений может избавить вас от написания множества строчек кода. Если у вас уже есть какой-никакой опыт работы в индустрии, но вы не умеете использовать регулярные выражения — вы разбазариваете 20-30% своей продуктивности. Я настоятельно рекомендую вам освоить регулярные выражение, так как это единовременная инвестиция в себя (по известному принципу “learn once, write anywhere”).
https://dev.to/visheshpatel/introduction-to-regular-expression-with-modern-c-1bn4
#cpp #programming
👉 @cpp_lib
Ода хейта C++
Язык С++ по-настоящему стар. Казалось бы это должно идти ему на пользу, как хорошему вину. Но этому мешает обратная совместимость. Хорошая идея, если бы она работала...
Давайте просто честно признаемся: ни один из стандартов не был обратно совместим. ВСЕГДА реальные проекты требовали миграции и адаптации не то что под новую версию стандарта, но даже под новую версию компилятора. Чем больше проект, тем больше усилий, и порой фатальных. Уверен, среди читающих найдется человек, у которого на работе все еще 98й стандарт С++.
В целом, идея не ломать старое - хорошая. Лучше уж поломать совсем немного, чем вообще все. Не спорю, здесь С++ держится хорошо, местами даже слишком. Но из-за боязни сломать старое в языке засели старые и просто неправильные решения.
Язык настолько сильно прошит старыми древними идеями, что порой удивляешься как это до сих пор существует в современном мире, где есть куча других более изящных решений в других языках. И ведь логично было бы поправить самые крупные косяки, но нет, все заплаточки аккуратно пришиваются сверху чтобы "не дай боже старая всем нужная библиотека не сломалась". Ну раз она старая и всем нужная, разве никто не проапгрейдит ее?
Все же хотелось бы чтобы язык признавал свои ошибки и ломал даже самые старые концепции в угоду более лучшего будущего.
https://habr.com/ru/articles/811369/
#cpp #programming
👉 @cpp_lib
Подкаст про системное программирование для разработчиков на С/С++
Использовать компиляторы, операционные системы и отладчики — здорово, еще круче — понимать, как они устроены. О сложных материях системного программирования доступно рассказывают ведущие подкаста «Битовые маски». Вместе с гостями — практикующими инженерами и разработчиками — они обсуждают актуальные задачи в отрасли и случаи из практики.
Для разработчиков на C/C++ есть отдельный плейлист. Вот несколько тем из него:
• LLVM и GCC / Register allocation / IT-образование в вузах
• LLVM в компиляторах для GPU / Стандарты C++
• Разработка компиляторов / LLVM backend для RISC-V / Компилятор для Kotlin
• Сетевые протоколы / Гетерогенные системы / Операционные системы / RTOS
Смотреть подкаст →
Чтобы не пропустить новые выпуски подкаста, подписывайтесь на Telegram-канал «Битовые маски».
C++, ping и traceroute
Изучая сетевое программирование и имея в портфолио несколько проектиков на C++, связанных с сетевым программированием, я решил написать что-нибудь, что будет иметь реальное практическое применение.
Первое, что мне пришло в голову - утилита ping.
https://habr.com/ru/articles/726714/
#cpp #programming
👉 @cpp_lib
Астрофото: совмещаем одиночные кадры
Одной из главных проблем при съёмке астрофотографий являются разнообразные шумы. Не буду подробно останавливаться на том, откуда они берутся и какие компоненты в них присутствуют. Об этом уже есть хорошая серия статей на Хабре. Здесь я только резюмирую основной способ борьбы с шумом: нужно снять несколько кадров одной и той же области неба (чем больше, тем лучше) и усреднить сигнал с соответствующих пикселей.
Но какие пиксели на разных кадрах считать соответствующими? Если бы можно было гарантировать, что объекты между кадрами не сдвинутся ни на пиксель, то всё было бы предельно ясно: просто суммируем одни и те же пиксели на матрице. Но что делать, когда слежение неидеально, или съёмка вовсе ведётся с неподвижного штатива? Тогда звёзды и другие небесные тела будут смещаться, и перед сложением кадры нужно будет правильно наложить друг на друга. Эта статья посвящена тому, как это сделать.
https://habr.com/ru/articles/698992/
#cpp #programming
👉 @cpp_lib
📚Clean Code Principles and Patterns, 2nd Edition: A Software Practitioner’s Handbook
Автор: Petri Silén (2024)
Это одно из самых полных руководств для разработчиков программного обеспечения, которое поможет Вам писать чистый код каждый день. Автор изложил все свои знания, полученные за годы практики, в этой книге. В книге собраны принципы и паттерны, которые помогут разработчикам, от новичков и юниоров до опытных экспертов, писать более чистый код. Принципы и паттерны, представленные в книге, сопровождаются реалистичными, но понятными примерами, чтобы помочь читателю лучше понять их. Примеры написаны на языках Java, JavaScript/TypeScript и C++. Большинство примеров напрямую применимы и к другим языкам программирования. Читатель должен обладать базовыми знаниями одного из языков объектно-ориентированного программирования, чтобы получить максимальную пользу от этой книги.
#cpp #programming
👉 @cpp_lib
Презентационные материалы CppCon 2023
https://github.com/CppCon/CppCon2023/tree/main
#cpp #programming
👉 @cpp_lib