С++ задачи и вопросы
563 subscribers
551 photos
4 files
200 links
Задачи, тесты и теоретические вопросы по С++

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
⚙️ std::mdspan

std::mdspan из заголовка (C++23) — это многомерный представляемый вид массива, который позволяет безопасно работать с данными без копирования. Это мощный инструмент для работы с матрицами, тензорами и буферами.

👩‍💻

@quizcpp
⚙️ std::atomic_wait / std::atomic_notify_one

Методы std::atomic_wait и std::atomic_notify_one (C++20) позволяют эффективно синхронизировать потоки без активного ожидания (busy-waiting). Они приостанавливают выполнение потока, пока значение атомарной переменной не изменится.

👩‍💻

@quizcpp
⚙️ std::stop_token

std::stop_token из (C++20) предоставляет механизм мягкой остановки потоков, позволяя безопасно завершать их работу без принудительного прерывания. Это удобная альтернатива std::atomic или std::condition_variable для управления потоками.

👩‍💻

@quizcpp
🔥1
⚙️ std::format

Метод std::format из заголовка (C++20) предоставляет удобный способ форматирования строк, аналогичный printf, но с безопасностью типов и читаемым синтаксисом.

👩‍💻

@quizcpp
🔥1
⚙️ std::scope_exit

std::scope_exit из заголовка (C++23) позволяет автоматически выполнять код при выходе из области видимости. Это полезно для освобождения ресурсов и отмены операций без try/catch.

👩‍💻

@quizcpp
🚫 Антипаттерн недели: Использование new и delete вместо smart pointers

В C++ ручное управление памятью с new и delete может привести к утечкам памяти, неопределённому поведению и ошибкам двойного освобождения.

✔️ Используйте std::unique_ptr или std::shared_ptr из , которые автоматически освобождают ресурсы при выходе из области видимости.

👩‍💻

@quizcpp
👍1
⚙️ std::condition_variable

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

👩‍💻

@quizcpp
⚙️ std::identity

std::identity (C++20) — функциональный объект, который возвращает переданный ему аргумент без изменений. Полезен для адаптации алгоритмов.

👩‍💻

@quizcpp
Вопрос на собеседовании

Как работает expression SFINAE в C++, и чем оно отличается от обычного SFINAE?

Ответ ⬇️
SFINAE (Substitution Failure Is Not An Error) позволяет компилятору отбрасывать неподходящие шаблонные перегрузки без генерации ошибок. Expression SFINAE — это техника, когда проверяется не только наличие типа, но и возможность вызова выражения с ним.

Обычный SFINAE работает с typename, а expression SFINAE используется в decltype() для проверки существования конкретных операций или методов в типе.

Пример использования ⚙️
#include
#include

// Проверяем, есть ли у типа метод size()
template
auto has_size(int) -> decltype(std::declval().size(), std::true_type{}) {
return {};
}

template
std::false_type has_size(...) { return {}; }

int main() {
std::cout

@quizcpp
⚙️ std::from_chars

std::from_chars (C++17) позволяет эффективно преобразовывать строку в число без лишних аллокаций и проверок исключений, что делает его быстрее std::stoi.

👩‍💻

@quizcpp
⚙️ std::bind_front

std::bind_front (C++20) позволяет частично привязать первые аргументы функции или функторов, создавая удобные сокращённые вызовы.

👩‍💻

@quizcpp