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

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

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

Наши каналы: https://yangx.top/proglibrary/9197

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
加入频道
Концепт Derived

Концепт Derived в C++ используется для проверки того, является ли указанный тип производным от другого типа. Концепт имеет два шаблонных параметра: Derived и Base.

Концепт Derived удовлетворяется, если и только если Base является классом, который является либо Derived, либо публичным и недвусмысленным базовым классом Derived, игнорируя cv-модификаторы.

Например, код выше удовлетворяет концепту Derived.
💣 Кем вы видите себя через 5 лет: как отвечать на странные и неудобные вопросы на собеседовании

7 самых распространенных вопросов, которые точно задавали каждому из вас.

Читать статью
⚙️🛠️ Оптимизируя неоптимизируемое: ускорение компиляции C++

В статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio.

{fmt} — это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio. Последнюю она обошла по целому ряду аспектов:

🔹 Безопасность типов с проверками форматирующих строк во время компиляции. Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf.
🔹 Расширяемость. Определяемый пользователем тип можно сделать форматируемым. При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально.
🔹 Производительность. {fmt} намного быстрее любой распространённой реализации printf, порой на несколько порядков (например, в форматировании чисел с плавающей запятой).
🔹 Возможность переноса поддержки Unicode.

Продолжение здесь

#гайд
input_iterator

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

Итератор input_iterator представляет собой итератор, который может только читать значения элементов контейнера. Он не может их изменять.

Итераторы input_iterator должны удовлетворять следующим требованиям:
🔹 Они должны поддерживать оператор *, который возвращает значение элемента, на который указывает итератор.
🔹 Они должны поддерживать оператор ++, который перемещает итератор на следующий элемент контейнера.
📚Extreme C (2019)

✍️Автор: Amini K.

📃Страниц: 823

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

Ссылка на книгу
🤔 Очередной #дайджест по С++

🔽 Дорожная карта навыков разработчика на C++ — универсальная дорожная карта будет полезна всем, кто хочет развиваться в разработке

🔽 Больше функциональности в C++23 — приемы, дополнения и библиотеки улучшающие работу разработчика

🔽 Малоизвестные и интересные особенности C и C++ — малоизвестные и странные решения, принятые в языках C и C++, своего рода солянка из фактов

🔽 Про сортировку чисел и SIMD или как я обогнал STL в 16 раз — как быстро сортировать множества, в которых количество элементов не превышает 128 элементов

🔽 LLVM и GCC, Register allocation, IT-образование в вузах и прочее — познавательный разговор с разработчиком компиляторов для CPU и GPU
«Библиотека программиста» ищет контент-менеджера для ведения телеграм-каналов

Ищем человека, который грамотно пишет и разбирается в одной из этих тем:
👉С++
👉C#
👉DevOps

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Подробнее о вакансии и форма для отклика — по ссылке.

Ждем вас в команде!
#вопросы_с_собеседования

Объясните концепцию и применение шаблонов политик в C++ и как они способствуют принципам проектирования, основанным на композиции вместо наследования

Шаблоны политик в C++ представляют собой технику проектирования, при которой поведение класса параметризуется через шаблоны. Это позволяет программистам выбирать или изменять аспекты поведения класса на этапе компиляции, вставляя разные «политики» — это могут быть классы или функции, определяющие определённые аспекты поведения. Этот подход способствует гибкости и повторному использованию кода, позволяя композицию поведения вместо жёсткого наследования. Он также помогает уменьшить связность кода и увеличивает его модульность, поскольку изменения в одной политике не влияют на другие.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Алгоритм includes

Используется для распознавания, существуют ли все числа тз одного контейнера в других контейнерах. Это помогает проверить, является ли набор подмножеством другого набора или нет, учитывая, что набор упорядочен. Ожидается, что элементы будут отсортированы по порядку.
😱🤓 Неожиданное взаимодействие предсказания ветвлений и подсистем памяти

Статья посвящена оптимизации подсистем памяти.

В ней про взаимодействие механизма предсказания ветвлений с подсистемой памяти.

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

Далее вас ждут примеры и подробный разбор

#гайд
std::byte

std::byte — это тип данных, введенный в стандарт C++17. Он представляет собой один байт, то есть 8 бит. std::byte не является ни типом символа, ни типом числа. Он предназначен для представления байтов в памяти, независимо от того, используются они для хранения символов, чисел или чего-либо еще.

std::byte может использоваться в следующих случаях:
🔹 Для доступа к памяти, занимаемой другими объектами.
🔹 Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
🔹 Для реализации собственных типов данных, которые должны хранить байты.
Ответ: 2^32 - 25, то есть 4294967271.

Объяснение: вычитание имеет бОльший приоритет и выполнится раньше, чем вывод на экран.
25u означает unsigned int, вместимость этого типа от 0 до 2^32-1.
50 приводится к типу левого аргумента, и становится тоже unsigned int. При вычитании не может получиться отрицательное число, а так как беззнаковые типы "свёрнуты в кольцо", то -25 в unsigned int будет равно 2^32 - 25.
Алгоритм gcd

Используется для нахождения НОД двух чисел. Он принимает два значения одного типа данных в качестве аргументов и возвращает их НОД.
🤔 Очередной #дайджест по С++

Рассказы о SObjectizer — продолжение серии и работа с командами

Создание deb-пакета для самых маленьких — из простого проекта с разделяемыми библиотеками

Syrmia представила Autocheck — проект на базе LLVM/Clang для проверки кода C/C++ на соответствие стандарту AUTOSAR

Объединение интервалов в C++ нового поколения — объедините все перекрывающиеся интервалы и верните массив неперекрывающихся интервалов, которые охватывают все интервалы во входных данных

Что нам недодали в C++ — крик души и требования о выкупе
Что делает std::string::at()?

std::string::at() — это функция, предоставляемая классом std::string для доступа к отдельным символам в строке. Она принимает индекс в качестве аргумента и возвращает символ в указанной позиции.

Функция at() выполняет проверку границы (boundary check), что означает, что она проверяет, находится ли переданный индекс в пределах допустимых значений для строки. Если индекс находится вне диапазона, генерируется исключение std::out_of_range. Это отличается от оператора [], который не выполняет такую проверку.