Выбор ответа Middle Современный C++20/23 обновлено

Что такое корутины C++20

Вопрос

Что верно про корутины в C++20?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бесстековые функции с coawait/coyield, их состояние лежит в кадре. Корутина C++ сохраняет только свой кадр (локальные переменные и точку возобновления), обычно в куче.

Варианты ответа

  1. Каждая корутина работает в отдельном потоке из пула стандартной библиотеки
  2. Стандарт C++20 дал готовые std::task и std::generator для корутин
  3. Корутина хранит свой полный стек вызовов, как поток, и переключает его
  4. Бесстековые функции с co_await/co_yield, их состояние лежит в кадреправильный ответ

Разбор

Корутина C++ сохраняет только свой кадр (локальные переменные и точку возобновления), обычно в куче. Приостановиться можно только в самой корутине, не во вложенных обычных функциях. Поведение задаёт тип с promise_type. В C++20 библиотечных типов не было, std::generator добавили в C++23.

  • Потоков корутины сами не создают: возобновление происходит там, где его вызвали.
  • Готовых типов в C++20 нет.
  • Стековые (stackful) корутины это, например, Boost.Context, а не стандартные.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.