РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
32 of 815 menu

Ключевое слово co_return

Ключевое слово co_return используется внутри корутин для возврата значения и завершения выполнения корутины. В отличие от обычного return, который просто возвращает управление и значение из функции, co_return выполняет специальные действия: сохраняет возвращаемое значение в объекте обещания (promise), вызывает метод return_value или return_void, а затем освобождает фрейм корутины.

Ключевое слово co_return может использоваться в трёх формах: без выражения (для корутин, возвращающих void), с выражением (для возврата значения) и с фигурными скобками для списка инициализации. В первом параметре указывается возвращаемое значение, если оно есть.

Синтаксис

co_return; co_return expression; co_return { expression-list };

Пример

Рассмотрим простой пример корутины, которая возвращает число 42 с помощью co_return. Для работы с корутинами требуется подключить заголовок <coroutine>:

#include <iostream> #include <coroutine> using namespace std; struct Task { struct promise_type { Task get_return_object() { return Task{}; } suspend_never initial_suspend() { return {}; } suspend_never final_suspend() noexcept { return {}; } void return_void() { } void unhandled_exception() { } }; }; Task coro() { cout << "Start" << endl; co_return; cout << "Never reached" << endl; } int main() { coro(); return 0; }

Результат выполнения кода:

"Start"

Пример

Теперь рассмотрим корутину, которая возвращает значение 123 через co_return. Для этого в объекте обещания должен быть определён метод return_value:

#include <iostream> #include <coroutine> using namespace std; struct Task { struct promise_type { int value = 0; Task get_return_object() { return Task{}; } suspend_never initial_suspend() { return {}; } suspend_never final_suspend() noexcept { return {}; } void return_value(int v) { value = v; } void unhandled_exception() { } }; }; Task coro() { co_return 123; } int main() { coro(); cout << "Done" << endl; return 0; }

Результат выполнения кода:

"Done"

Пример

Также co_return можно использовать с фигурными скобками для возврата списка инициализации, например для возврата строки "abcde":

#include <iostream> #include <coroutine> #include <string> using namespace std; struct Task { struct promise_type { string value; Task get_return_object() { return Task{}; } suspend_never initial_suspend() { return {}; } suspend_never final_suspend() noexcept { return {}; } void return_value(string v) { value = v; } void unhandled_exception() { } }; }; Task coro() { co_return string{"abcde"}; } int main() { coro(); cout << "Done" << endl; return 0; }

Результат выполнения кода:

"Done"

Смотрите также

  • ключевое слово return,
    которое возвращает значение из обычной функции
  • ключевое слово co_await,
    которое приостанавливает выполнение корутины
  • ключевое слово co_yield,
    которое возвращает значение из корутины-генератора
  • ключевое слово auto,
    которое автоматически выводит тип переменной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить