C++23 新标准:关键变化与语言改进

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++23 新标准发布:有哪些变化以及如何影响开发



C++ 国际标准化委员会 (ISO/IEC JTC1/SC22/WG21) 已正式批准该语言的新版本——C++23。此版本不像 C++11 或 C++20 那样具有根本性变革,但包含了许多期待已久的改进,将使代码更安全、更具表现力且性能更高。我们来分析每位 C++ 开发者必须了解的关键新特性。



C++23 的主要变化



  • Deducing this (P0847R7) —— 最受期待的新特性。现在可以显式指定调用方法的对象,从而简化了左值/右值、常量版本和非常量版本的重载,并消除了 CRTP 模板中的代码重复。
  • std::expected (P0323R12) —— 一种无需异常的错误处理类型,是 std::optional 和异常的替代方案。它允许返回值或错误,这对于对性能有严格要求的系统至关重要。
  • std 模块 (P2465R3) —— 标准库现在通过模块导出,从而加快编译速度并改善代码隔离。例如,import std; 可以替代数十个 #include。
  • 协程改进 —— 新增了用于惰性序列的 std::generator 类型,并修复了 C++20 协程中许多与性能和人体工程学相关的问题。
  • 多线程 —— 用于线程同步的新机制 std::latch 和 std::barrier,以及改进的 std::counting_semaphore。


这对开发者意味着什么?



C++23 不会破坏向后兼容性,但引入了新的实践。例如,deducing this 简化了库的编写,而 std::expected 将逐步取代繁琐的返回码检查。许多编译器(GCC 13+、Clang 16+、MSVC 2022 17.6+)已经支持部分功能。



对于从事高负载系统工作的人来说,模块(构建速度提升 20-40%)和无需异常的错误处理改进尤其重要。如果您正在使用 C++20,迁移到 C++23 无需重写代码——只需启用新的编译标志即可。



何时能获得完整支持?



C++23 的完整支持预计在 2024 年底前在编译器中实现。目前可以使用 -std=c++2b (GCC/Clang) 或 /std:c++latest (MSVC) 标志来测试个别特性。我们建议从 std::expected 和 deducing this 开始——它们在实际项目中最有用。



您可以在编译器文档中找到最新的代码示例以及与 C++20 的对比。C++23 是一个渐进式的进步,使语言更安全、更方便,同时不牺牲性能。

推荐库