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

По вопросам сотрудничества: @adv_and_pr
Download Telegram
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.

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

std::fstream — это класс из стандартной библиотеки С++, который представляет собой поток данных, связанный с файлом. Он может использоваться для чтения, записи или одновременного чтения и записи из файла.

Для использования класса std::fstream необходимо подключить заголовочный файл fstream.

Объект класса std::fstream создается с помощью конструктора, которому передается имя файла и режим открытия. Режим открытия определяет, как будет использоваться поток.

#для_продвинутых
std::future::get()

Метод std::future::get() в C++ используется для получения результата асинхронного вычисления, связанного с объектом std::future.

Метод std::future::get() блокирует текущий поток до тех пор, пока асинхронное вычисление не будет завершено. После завершения вычисления метод std::future::get() возвращает результат вычисления.

Если асинхронное вычисление было прервано или завершилось с ошибкой, метод std::future::get() бросает исключение std::future_error.

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

std::logic_error — это класс исключений в языке программирования C++, который используется для представления логических ошибок в программе. Логические ошибки — это ошибки, которые могут быть обнаружены до выполнения программы, например, нарушение логических предусловий или классовых инвариантов.

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

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

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

Код ошибки представляет собой платформо-зависимый код, который возвращается операционной системой при возникновении ошибки. Категория ошибки представляет собой более общий код, который может быть использован для классификации ошибок.

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