Hardc++20coroutines

Что такое coroutines в C++20?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Coroutines (C++20) — функции, которые могут приостанавливаться и возобновляться. Ключевые слова: co_await (приостановка с ожиданием), co_yield (вернуть значение и приостановиться), co_return (завершить).

generator<int> count(int n) {
    for (int i = 0; i < n; ++i)
        co_yield i;          // вернуть i и приостановиться
}

for (int x : count(5))       // «ленивый» генератор
    std::cout << x;

Компилятор превращает корутину в state machine. Стандартная библиотека C++20 даёт только фреймворк (coroutine_handle, suspend_always/never), но не готовые типы — нужны библиотеки типа cppcoro или свой promise_type.

Применения: асинхронный I/O (async/await), генераторы последовательностей, лёгкие «потоки» (миллионы корутин вместо потоков ОС). Корутины не вытесняющие — переключаются только в точках suspension. Аналоги: async/await в JS, Python, C#.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.