CRYENGINE — мощная платформа для разработки игр в реальном времени на С++, созданная Crytek.
https://www.cryengine.com/
https://www.cryengine.com/
CRYENGINE
CRYENGINE | The complete solution for next generation game development by Crytek
The complete solution for next generation game development by Crytek
C++, ping и traceroute
Ping — утилита для проверки целостности и качества соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса
Смотреть статью
Ping — утилита для проверки целостности и качества соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса
Смотреть статью
#вопросы_с_собеседований
Что дают разные модификаторы при наследовании?
Ответ:
Изменяют зону видимости членов базового класса.
При private наследовании protected и public члены становятся private. При protected наследовании public становится protected. А при public ничего не изменяется.
Что дают разные модификаторы при наследовании?
Ответ:
При 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. Если такой элемент не найден, функция возвращает последний элемент.
Алгоритм find_if возвращает итератор к первому элементу в диапазоне [first, last), для которого pred(Uniary Function) возвращает true. Если такой элемент не найден, функция возвращает последний элемент.
Алгоритм find_if_not возвращает итератор к первому элементу в диапазоне [first, last), для которого pred(Uniary Function) возвращает false. Если такой элемент не найден, функция возвращает последний элемент.
Указатели с ключевыми словами const и volatile
Ключевые слова const и volatile изменяют то, как обрабатываются указатели. const указывает, что данные по указателю не могут быть изменены после инициализации; volatile указывает, что значение может быть изменено действиями, отличными от тех, которые указаны в пользовательском приложении.
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
позволяет эффективно управлять многопоточным доступом к ресурсам, повышая производительность за счет одновременного чтения и блокирования только при записи.Это особенно полезно для сценариев, где чтение данных происходит чаще, чем запись.
Please open Telegram to view this post
VIEW IN TELEGRAM
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++, который используется для представления ошибок. Он содержит два компонента: код ошибки, представляющий собой целое число, и категорию ошибки, представляющую собой строку.Код ошибки представляет собой платформо-зависимый код, который возвращается операционной системой при возникновении ошибки. Категория ошибки представляет собой более общий код, который может быть использован для классификации ошибок.
#для_продвинутых
std::promise
Когда создается объект
Поставщик использует методы
#для_продвинутых
std::promise
— это шаблонный класс, который предоставляет механизм для связи потока, который обещает предоставить значение в будущем (поставщик), с потоком, который ожидает получение этого значения (потребитель).Когда создается объект
std::promise
, он создает связанный объект std::future
. Объект std::future
предоставляет интерфейс для получения значения или исключения, которое будет предоставлено объектом std::promise
.Поставщик использует методы
set_value()
или set_exception()
для установки значения или исключения, которое будет предоставлено объекту std::promise
. Потребитель использует метод get()
объекта std::future
для получения значения или исключения, которое было установлено поставщиком.#для_продвинутых
std::span
Тип
#для_продвинутых
std::span
— это шаблонный класс, который представляет собой непрерывное представление последовательности объектов. Он был введен в стандарт С++20 и предоставляет безопасный и эффективный способ доступа к элементам такой последовательности.Тип
std::span
имеет два шаблонных параметра:T
— тип элементов последовательности.Extent
— количество элементов последовательности. Если этот параметр не указан, то он считается равным dynamic_extent
, что означает, что количество элементов не известно заранее.#для_продвинутых
std::duration
Шаблонный класс
— Количество периодов (tick count) типа Rep.
— Период тика (tick period), который представляет собой дробное число секунд, приходящееся на один тик.
Стандартная библиотека C++ предоставляет ряд предопределенных типов интервалов времени, таких как seconds, minutes, hours, days, weeks, months и years. Эти типы имеют следующие значения периода тика (2 картинка).
#для_начинающих
Шаблонный класс
std::duration
в С++ представляет собой интервал времени. Он состоит из двух частей:— Количество периодов (tick count) типа Rep.
— Период тика (tick period), который представляет собой дробное число секунд, приходящееся на один тик.
Стандартная библиотека C++ предоставляет ряд предопределенных типов интервалов времени, таких как seconds, minutes, hours, days, weeks, months и years. Эти типы имеют следующие значения периода тика (2 картинка).
#для_начинающих
std::nexttoward()
Функция
Функция принимает два аргумента:
Если оба аргумента равны, функция возвращает y, преобразованное к типу возвращаемого значения.
Возвращаемое значение:
Следующее представимое значение после
Если
#для_продвинутых
Функция
std::nexttoward()
возвращает следующее представимое значение после x
в направлении y
. Эта функция ведет себя аналогично функции std::nextafter()
, но с потенциально более точным y
.Функция принимает два аргумента:
x
— базовое значениеy
— значение, к которому приближается возвращаемое значениеЕсли оба аргумента равны, функция возвращает y, преобразованное к типу возвращаемого значения.
Возвращаемое значение:
Следующее представимое значение после
x
в направлении y
.Если
x
— это наибольшее конечное значение, представимое в типе, и результат бесконечен или не представим, возникает ошибка переполнения диапазона.#для_продвинутых