Senior C++ Developer
12.9K subscribers
1.29K photos
3 videos
587 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
C++23: четыре новых ассоциативных контейнера

Смотреть статью
std::is_floating_point_v

std::is_floating_point_v является переменной шаблона (template variable), предоставляемой стандартной библиотекой (начиная с C++17). Эта переменная используется для определения, является ли указанный тип данных числом с плавающей запятой.

#для_начинающих
Метод back()

Метод back() используется для получения ссылки на последний элемент строки (или контейнера, в общем случае). Он возвращает ссылку на последний символ строки, который можно использовать для чтения или записи. Если строка пуста, поведение не определено.

Код создает строку «Hello, World!» и использует back() для получения ссылки на последний символ ('!'). Затем он выводит этот символ, заменяет его на 'X' и выводит измененную строку.

Обратите внимание, что метод back() не проверяет, пуст ли контейнер. Поэтому, прежде чем использовать back(), рекомендуется проверить, что строка не пуста.

#для_продвинутых
libusb

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

#для_продвинутых
Curiously recurring template pattern (CRTP)

Curiously Recurring Template Pattern (CRTP) - это техника, используемая в C++, при которой класс наследуется от самого себя в качестве параметра шаблона. Эта техника позволяет создавать классы с доступом к своим собственным членам через наследование, что может быть полезно для реализации различных шаблонов проектирования и оптимизации кода.

#для_начинающих
Алгоритм forward_list::before_begin()

Алгоритм возвращает итератор, указывающий на позицию перед первым элементом forward_list.

Временная сложность: O(1)
Вспомогательное пространство: O(1).

Подробнее можно почитать здесь.
Метод crbegin

Возвращает постоянный обратный итератор, указывающий на последний элемент вектора (обратное начало). Он перемещается от последнего к первому элементу.

Подробнее можно почитать здесь.
Декларатор ссылки lvalue: &

Содержит адрес объекта, но синтаксически ведет себя подобно объекту.

Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.

Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.

В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.
CRYENGINE — мощная платформа для разработки игр в реальном времени на С++, созданная Crytek.

https://www.cryengine.com/
C++, ping и traceroute

Ping — утилита для проверки целостности и качества соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса

Смотреть статью
#вопросы_с_собеседований
Что дают разные модификаторы при наследовании?

Ответ:
Изменяют зону видимости членов базового класса.
При private наследовании protected и public члены становятся private. При protected наследовании public становится protected. А при public ничего не изменяется.
Алгоритм find_if и find_if_not

Алгоритм find_if возвращает итератор к первому элементу в диапазоне [first, last), для которого pred(Uniary Function) возвращает true. Если такой элемент не найден, функция возвращает последний элемент.

Алгоритм find_if_not возвращает итератор к первому элементу в диапазоне [first, last), для которого pred(Uniary Function) возвращает false. Если такой элемент не найден, функция возвращает последний элемент.
Указатели с ключевыми словами const и volatile

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

volatile полезно для объявления объектов в общей памяти, к которым могут обращаться несколько процессов или для глобальных областей данных.
➡️ Ассоциативность оператора массива

A[8] - это то же самое, что и *(A + 8). Так как операция сложения ассоциативна, она может быть переписана как *(8 + A), что синонимично ..... 8[A]

Никто не говорил, что это должно быть обязательно полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Улучшение многопоточности с использованием std::shared_mutex и std::shared_lock

Использование std::shared_mutex и std::shared_lock позволяет эффективно управлять многопоточным доступом к ресурсам, повышая производительность за счет одновременного чтения и блокирования только при записи.

Это особенно полезно для сценариев, где чтение данных происходит чаще, чем запись.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Использование std::shared_ptr для Умного Управления Памятью

std::shared_ptr — это умный указатель, который позволяет нескольким указателям совместно владеть одним объектом.

Когда последний std::shared_ptr, указывающий на объект, удаляется, объект также уничтожается.
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция std::atomic_load

Функция std::atomic_load используется для атомарного чтения значения из атомарной переменной. Это означает, что чтение значения происходит без риска, что оно будет изменено другим потоком во время чтения.

Синтаксис:
template <class T>
T atomic_load(const volatile atomic<T>* obj) noexcept;

template <class T>
T atomic_load(const atomic<T>* obj) noexcept;


#для_продвинутых
std::scoped_lock

std::scoped_lock — это класс-обертка над одним или несколькими мьютексами, который обеспечивает удобный механизм владения мьютексами в стиле RAII. При создании объекта std::scoped_lock он пытается захватить владение мьютексами, которые ему передаются.

std::scoped_lock был добавлен в стандарт C++ в версии 17. Он является заменой устаревшего класса std::lock_guard.

#для_продвинутых