c++怎么使用C++20的协程_c++ C++20协程使用方法

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

c++怎么使用c++20的协程_c++ c++20协程使用方法

C++20 引入了原生协程支持,让异步编程更直观。要使用 C++20 协程,需满足三个关键条件:函数包含 co_awaitco_yieldco_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_typehandleawaiter 三者协作机制。虽然标准未提供通用 task/generator,但通过自定义类型可灵活实现所需行为。

以上就是c++++怎么使用C++20的协程_c++ C++20协程使用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 01:29:49
下一篇 2025年12月19日 01:30:02

相关推荐

发表回复

登录后才能评论
关注微信