⚙️ std::linear_congruential_engine
std::linear_congruential_engine — это генератор псевдослучайных чисел, который основан на методе линейной конгруэнтности. Он полезен, когда требуется простой, быстрый и воспроизводимый генератор случайных чисел с контролируемыми параметрами.
👩💻
@quizcpp
std::linear_congruential_engine — это генератор псевдослучайных чисел, который основан на методе линейной конгруэнтности. Он полезен, когда требуется простой, быстрый и воспроизводимый генератор случайных чисел с контролируемыми параметрами.
👩💻
@quizcpp
👍1
⚙️ std::destroy_n
std::destroy_n (C++17) удаляет заданное количество объектов, вызывая их деструкторы вручную. Это особенно полезно при ручном управлении временем жизни объектов, например, в аллокаторах или при использовании алгоритмов uninitialized_*.
👩💻
@quizcpp
std::destroy_n (C++17) удаляет заданное количество объектов, вызывая их деструкторы вручную. Это особенно полезно при ручном управлении временем жизни объектов, например, в аллокаторах или при использовании алгоритмов uninitialized_*.
👩💻
@quizcpp
👍1
⚙️ std::assume_aligned
std::assume_aligned (C++20) информирует компилятор о том, что указатель выровнен по определенной границе. Это может повысить производительность при работе с SIMD и низкоуровневыми структурами. Эта функция полезна в высокопроизводительных вычислениях и системном программировании.
👩💻
@quizcpp
std::assume_aligned (C++20) информирует компилятор о том, что указатель выровнен по определенной границе. Это может повысить производительность при работе с SIMD и низкоуровневыми структурами. Эта функция полезна в высокопроизводительных вычислениях и системном программировании.
👩💻
@quizcpp
👍1
⚙️ std::stacktrace
std::stacktrace (C++23) предоставляет возможность получения стека вызовов в процессе выполнения программы. Это может быть очень полезно для ведения логов, отладки, создания отчетов о сбоях и встроенной диагностики — даже в продуктивной среде.
👩💻
@quizcpp
std::stacktrace (C++23) предоставляет возможность получения стека вызовов в процессе выполнения программы. Это может быть очень полезно для ведения логов, отладки, создания отчетов о сбоях и встроенной диагностики — даже в продуктивной среде.
👩💻
@quizcpp
⚙️ std::is_constant_evaluated()
std::is_constant_evaluated() (C++20) помогает выяснить, выполняется ли код в процессе constexpr-вычисления. Это полезно для создания функций, которые ведут себя по-разному на этапе компиляции и во время выполнения.
👩💻
@quizcpp
std::is_constant_evaluated() (C++20) помогает выяснить, выполняется ли код в процессе constexpr-вычисления. Это полезно для создания функций, которые ведут себя по-разному на этапе компиляции и во время выполнения.
👩💻
@quizcpp
⚙️ std::uninitialized_default_construct_n
std::uninitialized_default_construct_n (C++17) вызывает конструкторы по умолчанию для объектов в неинициализированной области памяти без задания значений. Это удобно при ручном управлении памятью и создании аллокаторов или контейнеров.
👩💻
@quizcpp
std::uninitialized_default_construct_n (C++17) вызывает конструкторы по умолчанию для объектов в неинициализированной области памяти без задания значений. Это удобно при ручном управлении памятью и создании аллокаторов или контейнеров.
👩💻
@quizcpp
⚙️ std::to_address()
std::to_address() (C++20) позволяет получить обычный указатель из итератора или умного указателя. Это удобно для работы с памятью в универсальном формате, не завися от типа указателя.
👩💻
@quizcpp
std::to_address() (C++20) позволяет получить обычный указатель из итератора или умного указателя. Это удобно для работы с памятью в универсальном формате, не завися от типа указателя.
👩💻
@quizcpp
⚙️ std::default_sentinel
std::default_sentinel (C++20) является универсальным индикатором конца диапазона и применяется с пользовательскими итераторами и диапазонами. Это удобно для формирования "открытых" и ленивых представлений данных.
👩💻
@quizcpp
std::default_sentinel (C++20) является универсальным индикатором конца диапазона и применяется с пользовательскими итераторами и диапазонами. Это удобно для формирования "открытых" и ленивых представлений данных.
👩💻
@quizcpp
⚙️ std::unexpected
std::unexpected (хотя и устарел в C++17, но представляет интерес с исторической точки зрения) применяется для установки обработчика для непредусмотренных исключений, которые выбрасываются функциями с noexcept(false) или спецификацией throw(). Это может быть полезно для отладки и управления исключениями в старом коде.
👩💻
@quizcpp
std::unexpected (хотя и устарел в C++17, но представляет интерес с исторической точки зрения) применяется для установки обработчика для непредусмотренных исключений, которые выбрасываются функциями с noexcept(false) или спецификацией throw(). Это может быть полезно для отладки и управления исключениями в старом коде.
👩💻
@quizcpp
⚙️ std::launder
std::launder (C++17) применяется для безопасного доступа к объекту после его повторной инициализации в той же области памяти с помощью placement new. Это имеет значение при низкоуровневых операциях, связанных с ручным управлением жизненным циклом объектов.
👩💻
@quizcpp
std::launder (C++17) применяется для безопасного доступа к объекту после его повторной инициализации в той же области памяти с помощью placement new. Это имеет значение при низкоуровневых операциях, связанных с ручным управлением жизненным циклом объектов.
👩💻
@quizcpp
👍1
⚙️ std::ranges::chunk_view
std::ranges::chunk_view (C++23) делит диапазон на равные сегменты фиксированной длины. Это удобно для работы с данными блоками, например, при пакетной обработке или создании батчей.
👩💻
@quizcpp
std::ranges::chunk_view (C++23) делит диапазон на равные сегменты фиксированной длины. Это удобно для работы с данными блоками, например, при пакетной обработке или создании батчей.
👩💻
@quizcpp
⚙️ std::midpoint
std::midpoint находит среднее значение между двумя числами, избегая при этом переполнения. Это особенно полезно при работе с диапазонами, бинарным поиском и безопасными арифметическими операциями.
👩💻
@quizcpp
std::midpoint находит среднее значение между двумя числами, избегая при этом переполнения. Это особенно полезно при работе с диапазонами, бинарным поиском и безопасными арифметическими операциями.
👩💻
@quizcpp
⚙️ std::ssize
std::ssize возвращает размер контейнера в виде знакового числа. Это удобно при итерации, когда необходимо безопасно использовать индексы типа int вместо size_t, особенно в циклах с отрицательными смещениями или при сравнении с -1.
👩💻
@quizcpp
std::ssize возвращает размер контейнера в виде знакового числа. Это удобно при итерации, когда необходимо безопасно использовать индексы типа int вместо size_t, особенно в циклах с отрицательными смещениями или при сравнении с -1.
👩💻
@quizcpp
👍1
🚫 Антипаттерн недели: Пропуск ключевого слова virtual при наследовании с полиморфизмом в C++
В C++ если в базовом классе не указано ключевое слово virtual, это приводит к тому, что ожидаемый полиморфизм не работает. Методы производного класса не будут вызываться через указатель на базовый класс, если метод не объявлен как virtual.
✔️ Добавляйте virtual в базовые классы и override в производные.
👩💻
@quizcpp
В C++ если в базовом классе не указано ключевое слово virtual, это приводит к тому, что ожидаемый полиморфизм не работает. Методы производного класса не будут вызываться через указатель на базовый класс, если метод не объявлен как virtual.
✔️ Добавляйте virtual в базовые классы и override в производные.
👩💻
@quizcpp
👍2
⚙️ std::clamp
std::clamp сжимает значение в определённые рамки. Это полезно для проверки чисел, нормализации данных и предотвращения выхода за пределы.
👩💻
@quizcpp
std::clamp сжимает значение в определённые рамки. Это полезно для проверки чисел, нормализации данных и предотвращения выхода за пределы.
👩💻
@quizcpp
👍1