C++20 引入的协程(Coroutines)是最受期待也最让人困惑的特性之一。它不像其他语言那样提供一个开箱即用的"async/await"运行时——C++ 的协程是一套可定制的基础设施,三个关键字(co_await、co_return、co_yield)和一套 Promise/Awaiter 协议构成了一个编译器变换框架,库作者在此基础上构建具体的协程类型(如 generator<T>、task<T>)。
本文从"编译器把协程函数变成了什么"出发,拆开协程帧(coroutine frame)、Promise 类型、Awaiter 协议和 HALO 优化,帮你建立起对 C++ 协程运行时行为的精确心智模型。
2026/5/6大约 6 分钟