Библиотека 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
加入频道
Когда вы последний раз использовали Copilot?
#интерактив
«Библиотека программиста» продолжает поиски контент-менеджера для ведения телеграм-каналов

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

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

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

Ждем вас в команде!
(Жизненный) cовет от создателя C++

Создатель C++, Бьёрн Страуструп, делится ценными жизненными советами, которыми, скажем прямо, могли бы воспользоваться все разработчики, независимо от их многолетнего опыта. По словам Бьерна, «вы не можете просто писать код», вам нужно развивать больше навыков, если вы хотите стать всесторонним успешным разработчиком. Посмотрите это неизданное интервью, если вы хотите получить вдохновение и рекомендации на своем пути разработчика от одного из OG.

Смотреть видео
Проверить, найден ли элемент в массиве С++

В С++ вы должны использовать std::findи проверить, указывает ли результирующий указатель на конец диапазона.
#вопросы_с_собеседований
Мocking

Мокирование — это процесс создания имитаций (моков) объектов или компонентов программы, чтобы тестировать код без необходимости использовать реальные зависимости.

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

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

Смотреть статью
Как вы предпочитаете работать: дистанционно или в офисе?
#интерактив
Cache miss

Cache miss (промах в кэше) в C++ относится к ситуации, когда процессор не может найти нужные данные в кэше, и должен обратиться к более медленной памяти (например ОЗУ), для получения этих данных.

Когда код выполняется на процессоре, процессор пытается загрузить данные или инструкции из кэша первого, второго или третьего уровня (L1, L2, L3 и так далее), прежде чем обращаться к оперативной памяти. Если данные или инструкции отсутствуют в кэше, возникает кэш-промах (cache miss), и процессор должен загрузить их из оперативной памяти, что занимает гораздо больше времени, чем доступ к данным в кэше.
#код
Очередной #дайджест по С++:

✍️ Можно ли доверить компилятору оптимизацию вашего кода?
Автор объясняет общую структуру компиляторов, пригодную для оптимизации статических языков, таких как Rust или C++.

✍️ Проверка компилятора GCC 13 с помощью PVS-Studio
Цель — обнаружить ошибки в коде GCC с помощью анализатора PVS-Studio.

✍️ Почему C++ не устаревает
Что же делает язык с 40-летней историей таким популярным и почему сегодня он только укрепляет позиции?

✍️ Как я присоединился к сообществу bug 323
Это история о баге, от которого хочется рвать на себе волосы.

✍️ Приятный разговор о знаковых и беззнаковых целых числах (с обжаркой Google)
Правильный выбор целочисленного типа — плохо изученная тема, которая привела к стандартизации проблемных интерфейсов в C++, плохо разработанным требованиям безопасности и путанице среди разработчиков.
std::atomic_thread_fence

std::atomic_thread_fence — это функция, которая устанавливает порядок синхронизации памяти для не атомарных и расслабленных атомарных доступов, как указано в аргументе order, без связанной атомарной операции.

std::atomic_thread_fence может использоваться для обеспечения правильного порядка чтения и записи в многопоточных программах.

В этом примере два потока выполняют функции write_x_then_y и read_y_then_x:

- write_x_then_y устанавливает значение атомарной переменной x равным 1, затем вызывает std::atomic_thread_fence с аргументом std::memory_order_release и устанавливает значение атомарной переменной y равным 1.

- read_y_then_x считывает значение атомарной переменной y, затем вызывает std::atomic_thread_fence с аргументом std::memory_order_acquire и считывает значение атомарной переменной x.
#код
Новая статическая идиома constexpr std::integral_constant

Небольшая заметка об улучшении, которое вы можете применять в своем коде.

Читать статью
std::midpoint

std::midpoint — это функция, которая вычисляет среднюю точку между двумя целыми числами, числами с плавающей точкой или указателями. Она возвращает половину суммы a и b, при этом не происходит переполнения.

Если a и b имеют целочисленный тип и сумма является нечетной, то результат округляется в сторону a. Если a и b имеют тип с плавающей точкой, то происходит не более одной неточной операции.
#код
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?

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

Если исключение выбрасывается из конструктора, то все поля, которые были успешно сконструированы до момента выброса исключения, будут корректно разрушены. Это гарантируется механизмом исключений в C++.

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

Позднее связывание (или динамическое связывание) — это концепция в C++, которая связывает вызов метода с его реализацией во время выполнения программы, а не на этапе компиляции. Это позволяет достичь полиморфизма и инкапсуляции, так как объекты могут вызывать методы, которые будут разрешены на основе их фактического типа, а не только статического типа.

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

Смотреть код
Ключевое слово const

Ключевое слово const используется для создания констант и неизменяемых объектов.

— Const для объявления переменных: запрещает изменение объекта после инициализации.

— Const указатели и ссылки: указатель или ссылка на константный объект. Нельзя изменить объект через них, только читать.

— Функции, возвращающие const значения: гарантируют, что функция не изменит объект.

— Const члены класса: нельзя изменить через объект класса.

— Const методы класса: не меняют члены класса. Часто применяются к getter-методам.
#код
Очередной #дайджест по С++:

✍️ Что в DI-Контейнере твоем, С++? Пробуем написать
Разбор DI-контейнеров на C++.

✍️ Установка OpenCV под Windows
В данной статье описан способ сборки OpenCV из исходников с помощью cmake и Microsoft Visual Studio, и пример запуска своего проекта на cmake.

✍️ Краткий обзор нововведений C++23: deducing this
Документ «deducing this», принятый в последний стандарт C++, вводит новый, третий тип методов классов, сочетающий в себе свойства двух уже существующих: нестатических и статических, открывающий перед нами новые горизонты.

✍️ Регулятор нагрузки
Данный регулятор управляется при помощи arduino и симисторного выхода.

✍️ Компилируем быстрые консольные .exe приложения на PHP 8.1 в 2023 году, а почему бы и нет?
С каждым релизом PHP становится всё быстрее, а при включении JIT (Just-In-Time) компиляции достигает почти отметок того же C.
Сколько лет опыта по вашему должен иметь мидл?
#интерактив
std::tuple

std::tuple — это шаблонный класс, представляющий собой фиксированный набор элементов разных типов. Проще говоря, удобный инструмент для упаковки данных разных типов

Элементы tuple инициализируются в конструкторе и доступны только для чтения после создания.

tuple часто используется в комбинации с tie для присваивания кортежа переменным.
#код
Что такое рефакторинг?

Рефакторинг — это процесс изменения внутренней структуры программы без изменения ее внешнего поведения.

Рефакторинг кода может применяться в следующих ситуациях:

— Улучшение читаемости и понятности кода.
— Оптимизация производительности.
— Устранение дублирования кода.

Рефакторинг особенно важен при работе над большими проектами, где код многократно изменяется и расширяется. Он позволяет поддерживать кодбейз чистым, современным и масштабируемым.
#вопросы_с_собеседований