Библиотека 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
加入频道
Позднее связывание

Позднее связывание (или динамическое связывание) — это концепция в 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 для присваивания кортежа переменным.
#код
Что такое рефакторинг?

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

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

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

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

Паттерн Strategy — это паттерн проектирования, который позволяет определять семейства связанных алгоритмов и делать их взаимозаменяемыми.
Это дает возможность выбирать конкретный алгоритм во время выполнения программы.

Основная идея паттерна Strategy заключается в том, чтобы вынести алгоритмы в отдельные классы-стратегии и передавать нужную стратегию в клиентский код.

Это паттерн используется, когда:
— Нужно использовать разные варианты одного и того же алгоритма в разных ситуациях.
— Нужно легко добавлять новые стратегии, не меняя существующий клиентский код.
— Нужно избавиться от условных операторов, выбирающих алгоритм.
#код
lmdeploy

LMDeploy — это набор инструментов для сжатия, развертывания и обслуживания LLM.

Открыть страницу
Сколько лет опыта по вашему должен иметь синьор?
#интерактив
RCU (Read-Copy-Update)

RCU (Read-Copy-Update) — это механизм синхронизации доступа к данным в многопоточных приложениях. Он позволяет избежать блокировок при чтении данных, делая копию для чтения и обновляя оригинал после того, как все чтения завершены.

RCU особенно полезен, когда чтение данных происходит гораздо чаще, чем запись.

В примере мы сначала берем rcu_read_lock, чтобы защитить чтение foo. В другом потоке происходит модификация foo с помощью rcu_assign_pointer, которая делает копию данных, а оригинал удаляется после synchronize_rcu.
Таким образом чтение в первом потоке происходит без блокировок и избегает конфликтов с изменением данных в другом потоке. RCU гарантирует, что указатель foo будет виден как старое значение в первом потоке.
#код
Очередной #дайджест по С++:

🤖 Circle может стать будущим C++
Один простой трюк, позволяющий освободить творческие способности в эволюции языка C++.

🤖 AgentBench
Комплексный тест для оценки LLM как агентов.

🤖 fuzzing
Учебники, примеры, обсуждения, исследовательские предложения и другие ресурсы, связанные с фаззингом.

🤖 Моделирование трубы в реальном времени
Создание полноценной симуляции.
std::size

std::size — это функция из стандартной библиотеки C++, которая возвращает размер контейнера или массива.

Она определена в заголовочном файле, работает со всеми стандартными контейнерами (vector, deque, list, array и др.) и с массивами всех типов, позволяя получить размер контейнера или массива в runtime.
#код
Изучите C++: введение для начинающих

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

Читать статью
🎓💼 ТОП-9 не самых очевидных компаний для стажировки в ИТ

Везде просят опыт работы... Но где его взять? Как раз об этом сейчас и расскажем!

🔗Читать статью
🔗Зеркало
Как тестировать закрытые методы?

Проверка закрытых методов в C++ может быть осуществлена путем написания тестовых случаев, которые используют публичные методы, которые в свою очередь вызывают закрытые методы. Этот подход называется "тестирование черного ящика" и позволяет тестировать функциональность закрытых методов, не раскрывая их реализацию.
#вопросы_с_собеседований
Перегрузка операторов

Перегрузка операторов позволяет определить для объектов классов встроенные операторы, такие как +, -, * и т. д. Для определения оператора для объектов своего класса, необходимо определить функцию, название которой содержит слово operator и символ перегружаемого оператора.

В этом примере в классе Counter определен оператор сложения, цель которого сложить два объекта Counter. Текущий объект будет представлять левый операнд операции. Объект, который передается в функцию через параметр counter, будет представлять правый операнд операции.
#код
Исследование различий между C++ и C: почему C++ преобладает

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

Читать статью
Libcurl

Libcurl — это библиотека для передачи файлов с множественным протоколом, которая поддерживает огромное множество протоколов. Также Libcurl поддерживает сертификаты SSL, HTTP POST, HTTP PUT, загрузку FTP, загрузку на основе форм HTTP и многое другое.

В этом примере создается объект CURL, затем вызывается curl_easy_init для его инициализации. Затем устанавливаются опции CURLOPT_URL и CURLOPT_WRITEFUNCTION с помощью curl_easy_setopt.
— CURLOPT_URL указывает URL-адрес для выполнения GET запроса.
— CURLOPT_WRITEFUNCTION указывает функцию обратного вызова для записи данных ответа.

Затем вызывается curl_easy_perform для выполнения запроса. После завершения запроса вызывается curl_easy_cleanup для очистки объекта CURL, а затем curl_global_cleanup для очистки глобальных ресурсов libcurl.

Результат выполнения этого кода — вывод содержимого страницы в стандартный вывод.
#код
Очередной #дайджест по С++:

✍️ Создаем проект STM32 C++ FreeRTOS в vscode для очень маленьких
Пошаговое создание проекта для новичков.

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

✍️ HOMEd: A почему «d»? Чтобы никто не догадался
Про умный дом и его возможности.

✍️ Написание компилятора C в 500 строк Python
Сложно ли это? Да, даже если отказаться от многих функций. Но, в то же время, это ужасно интересно, а результат оказался на удивление функциональным и несложным для понимания!