c++kquote>C++20协程需满足三条件:含co_await、co_yield或co_return;返回类型具promise_type;编译器支持C++20。GCC≥11、Clang≥14、MSVC2019起可用-std=c++20启用。自定义generator示例实现迭代生成整数序列。

C++20 引入了原生协程支持,让异步编程更直观。要使用 C++20 协程,需满足三个关键条件:函数包含 co_await、co_yield 或 co_return 关键字;返回类型具有协程 traits(即符合协程接口);编译器开启 C++20 支持。
启用协程环境
确保你的编译器支持 C++20 协程,并在编译时启用 C++20 标准:
GCC:使用 -std=c++20 且版本 ≥ 11Clang:≥ 14 版本并启用 -std=c++20MSVC:Visual Studio 2019 及以上,默认支持
定义协程返回类型
C++20 协程需要一个符合规范的返回类型,通常包括 promise_type。常见做法是自定义一个 task 或 generator 类型。
例如,实现一个简单的 generator 类型用于产生值:
立即学习“C++免费学习笔记(深入)”;
struct generator { struct promise_type { int current_value; suspend_always initial_suspend() { return {}; } suspend_always final_suspend() noexcept { return {}; } generator get_return_object() { return generator{this}; } void return_void() {} suspend_always yield_value(int value) { current_value = value; return {}; } void unhandled_exception() { std::terminate(); } };
struct iterator { promise_type* p; bool done; iterator& operator++() { done = !co_await_handle(p); return *this; } int operator*() const { return p->current_value; } bool operator!=(std::default_sentinel_t) const { return !done; }};promise_type* p;iterator begin() { return {p, false}; }std::default_sentinel_t end() { return {}; }
};
编写协程函数
使用 co_yield 返回一系列值:
generator range(int from, int to) { for (int n = from; n
调用方式:
for (int i : range(1, 5)) { std::cout
使用 co_await 实现异步等待
可以结合 std::suspend_always 和自定义 awaiter 实现异步操作。
struct async_op { bool await_ready() { return false; } void await_suspend(std::coroutine_handle h) { // 模拟延迟执行 std::thread([h]() { std::this_thread::sleep_for(std::chrono::seconds(1)); h.resume(); }).detach(); } void await_resume() {}};
task do_something() {std::cout
注意:task 是另一个常见的协程返回类型,需自行定义或使用第三方库(如 cppcoro)简化开发。
基本上就这些。C++20 协程核心在于理解 promise_type、handle 和 awaiter 三者协作机制。虽然标准未提供通用 task/generator,但通过自定义类型可灵活实现所需行为。
以上就是c++++怎么使用C++20的协程_c++ C++20协程使用方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476817.html
微信扫一扫
支付宝扫一扫