co_return завершает такую функцию.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpCrInr 575 of 696 menu
◀ ▶

Введение в сопрограммы в C++

Сопрограмма - это функция, которая может приостанавливать выполнение и позже продолжать его с того же места.

Ключевое слово co_return завершает такую функцию. Заголовок подключают как #include <coroutine>, а компилятор ожидает вложенный promise_type с методом return_void. Точки initial_suspend и final_suspend задают как std::suspend_never, поэтому тело выполняется сразу до конца. Запишем сопрограмму и вызовем ее из main:

#include <coroutine> #include <iostream> struct run_once { struct promise_type { run_once get_return_object() { return run_once{ std::coroutine_handle<promise_type>::from_promise(*this)}; } std::suspend_never initial_suspend() { return {}; } std::suspend_never final_suspend() noexcept { return {}; } void return_void() {} void unhandled_exception() { std::terminate(); } }; std::coroutine_handle<promise_type> h; explicit run_once(std::coroutine_handle<promise_type> handle) : h(handle) {} ~run_once() { h = {}; } run_once(const run_once&) = delete; run_once& operator=(const run_once&) = delete; }; static run_once hello() { co_return; } int main() { run_once job = hello(); std::cout << "ok\n"; return 0; }

При std::suspend_never в конце кадр сопрограммы уничтожается автоматически, а объект результата обнуляет дескриптор, не оставляя подвешенной сопрограммы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить