现在就该选 ASIO;Networking TS 已被 WG21 明确搁置,未被 C++23 收录,C++26 也大概率不会采纳,且主流编译器均无完整实现,而 ASIO 已成事实标准,C++23 起提供 std::asio 命名空间别名,支持 co_await、零成本抽象与成熟生态。

ASIO 和 Networking TS 到底用哪个?现在就该选 ASIO
Networking TS 没进 C++23,C++26 也大概率不会把它收为正式标准——它已被 WG21 明确搁置。不是“还没准备好”,是根本没继续推进。所有主流编译器(GCC、Clang、MSVC)都不提供完整实现,std::experimental::net 在 libstdc++ 和 libc++ 中早已被标记为 deprecated,MSVC 则压根没实装过可用版本。
你写 std::net::ip::tcp::socket,大概率连编译都过不去;而 boost::asio::ip::tcp::socket 或 std::asio::ip::tcp::socket(C++23 起随 Boost.Asio 1.83+ 提供的 std 命名空间别名)今天就能跑。
为什么 ASIO 不只是“暂时替代”,而是事实标准
ASIO 的设计深度融入了现代 C++ 实践:支持 co_await(需启用 ASIO_ENABLE_CONCEPTS)、零成本抽象、分层缓冲(asio::buffer)、可定制执行器(asio::execution::executor),而且它的异步模型和错误处理(asio::error_code vs throw)比 Networking TS 更稳定、文档更全、生态更厚。
- Boost.Asio 已被用于生产环境超 15 年,支撑着 Redis、RabbitMQ、ClickHouse 等底层网络模块
- C++23 开始,
std::asio成为 Boost.Asio 的官方标准命名空间映射,不是新库,是同一套代码的别名 - 所有 ASIO 教程、Stack Overflow 回答、CI 配置(如 Conan、vcpkg)默认指向
boost::asio或std::asio
想用“纯标准”但又不想掉坑?这些细节必须盯住
所谓“C++26 AOT 网络库”目前不存在——AOT(Ahead-of-Time)和网络库是正交概念,没人把 ASIO 编译成 AOT 模块;你真正要关心的是:如何让 ASIO 代码在不依赖运行时动态链接 Boost 的前提下静态构建、无异常、无 RTTI。
立即学习“C++免费学习笔记(深入)”;
- 定义
BOOST_ASIO_DISABLE_THREADS可去掉线程局部存储开销(单线程场景) - 用
-fno-exceptions -DBOOST_ASIO_NO_EXCEPTIONS关闭异常,改用error_code分支 - 静态链接时确保
boost_system和boost_thread(若启用线程)一并链接,否则出现undefined reference to 'boost::system::generic_category()' - 不要试图用
std::networking替代std::asio——这个命名空间在任何标准库中都不存在
如果你真在 C++26 项目里看到 networking 相关代码
那基本是以下三种情况之一:
- 用的是某个实验性 fork(比如某个内部封装了 libuv 或 mio 的自研头文件库),不是标准 TS
- 混淆了
std::net(已废弃的 TS 名字)和std::asio(C++23 引入的 ASIO 标准化别名) - 误读了提案编号——
P1322R4(Networking TS)早在 2022 年就被 move-to-deferred,后续无更新
真正在推进的是 P2116(Asynchronous Operations)和 P2300(std::execution),它们不提供 socket 封装,而是给 ASIO 这类库提供更底层的执行语义支持。
别等标准,ASIO 就是现在唯一靠谱的选择。它的复杂点不在 API,而在执行上下文生命周期管理——比如 io_context 析构时未完成的异步操作会直接 abort,这点比任何 TS 都容易踩空。



















