Выбор ответа Middle Современный C++20/23 обновлено
Что такое корутины C++20
Вопрос
Что верно про корутины в C++20?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Бесстековые функции с coawait/coyield, их состояние лежит в кадре. Корутина C++ сохраняет только свой кадр (локальные переменные и точку возобновления), обычно в куче.
Варианты ответа
- Каждая корутина работает в отдельном потоке из пула стандартной библиотеки
- Стандарт C++20 дал готовые
std::taskиstd::generatorдля корутин - Корутина хранит свой полный стек вызовов, как поток, и переключает его
- Бесстековые функции с
co_await/co_yield, их состояние лежит в кадреправильный ответ
Разбор
Корутина C++ сохраняет только свой кадр (локальные переменные и точку возобновления), обычно в куче. Приостановиться можно только в самой корутине, не во вложенных обычных функциях. Поведение задаёт тип с promise_type. В C++20 библиотечных типов не было, std::generator добавили в C++23.
- Потоков корутины сами не создают: возобновление происходит там, где его вызвали.
- Готовых типов в C++20 нет.
- Стековые (stackful) корутины это, например, Boost.Context, а не стандартные.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.