c++oding="utf-8" ?>
c++26不包含标准化网络api,因std::net(networking ts)因实现分歧、错误处理不统一及协程集成不明确,于2025年11月被移出路线图,转为“孵化中”;实际需结合asio等第三方库与c++26协程等特性实现异步网络编程。

目前不能直接用 C++26 标准库写异步网络程序——std::net(原 Networking TS)已被正式移除,C++26 不包含任何标准化的网络 API。
为什么 std::net 没进 C++26
Networking TS 在 ISO 投票中多次未达共识:实现分歧大、错误处理模型不统一、与协程集成路径不清晰。2025 年 11 月 WG21 决定将其从 C++26 路线图中撤下,转为“孵化中”状态(status: incubating),意味着它可能以模块或独立技术规范形式后续发布,但不会出现在 <net></net> 头文件里。
你如果在文档或博客里看到 “C++26 网络库”,大概率是混淆了以下三类内容:
- 对
std::networking的过时引用(该命名从未进入草案) - 第三方库(如 standalone Asio + C++26 协程)的包装层
- 编译器厂商实验性扩展(如 libc++ 的
__net内部头,不可移植)
实际能用的 C++26 网络编程组合
真正可行的路径是把 C++26 新特性嫁接到成熟网络库上,而非依赖标准库:
-
co_await+ standalone Asio:asio::awaitable<t></t>已原生支持 C++26 协程语义,无需boost::asio::use_awaitable;注意必须启用-std=c++26和-DASIO_STANDALONE -
std::generator+ TCP 流解析:用 C++23 引入的std::generator封装分包逻辑,配合 Asio 的async_read回调驱动 yield,避免手动管理缓冲区边界 -
std::expected替代error_code:Asio 同步接口可封装成返回std::expected<data_t std::error_code></data_t>的函数,但异步 handler 仍需保持const asio::error_code&参数签名(兼容性要求)
最容易踩的坑:协程生命周期与 io_context 绑定
用 co_await 写服务器时,常见崩溃源于协程挂起后 io_context 被销毁,但 handler 仍在队列中等待执行。关键约束有:
-
asio::io_context实例必须比所有依附其上的协程活得更久——不能在栈上构造后直接co_return - 不要在 lambda 中捕获局部
shared_ptr<this></this>后又让协程脱离对象生命周期(shared_from_this()不自动延长协程存活期) -
asio::steady_timer::async_wait的协程版本会隐式绑定到当前io_context,但若 timer 析构早于协程恢复,ec == asio::error::operation_aborted是唯一安全判断依据,不能忽略
真正的复杂点不在语法,而在资源归属权的显式表达:C++26 没给网络操作加新类型,只给了更好的工具去描述“谁负责关 socket、谁负责删 buffer、谁保证 io_context 不死”。这些事,依然得靠你手写 RAII 或用 Asio 的 bind_executor 显式传递上下文。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











