C++ 新标准:最新版本中的关键变化

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

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

开始课程

C++ 新版本发布:编程语言有哪些变化



C++ 标准化委员会 (ISO/IEC JTC1/SC22/WG21) 正式批准了标准的下一个版本——C++23。此版本带来了期待已久的改进,使该语言在开发系统软件和应用软件时更加安全、更具表现力且更方便。我们来谈谈最重要的新特性。



C++23 的主要变化



1. std::print —— 无需额外努力的格式化输出

最显著的功能之一是引入了 std::print 函数。现在,输出到标准流不再需要编写带有 std::cout 的冗长结构,或使用存在类型错误风险的 printf。std::print 基于 std::format,提供了类型安全性和可读性:

  • 自动格式化数字、字符串和用户自定义类型。
  • 支持区域设置和 Unicode。
  • 速度接近 printf,但没有内存泄漏。


2. 改进的协程支持

首次出现在 C++20 中的协程获得了一系列修复和补充。在 C++23 中,异步函数声明的语法得到了简化,并且添加了对 std::generator 的支持——这是一种用于即时创建值序列的新类型:

  • 生成器允许编写惰性计算,无需手动管理状态。
  • 减少了处理协程所需的样板代码量。


3. 模块——稳定性和性能

尽管模块是在 C++20 中引入的,但它们在编译器中的实现仍有待改进。新标准明确了导出和导入的规则,从而实现了:

  • 大型项目的编译时间缩短了 2 到 3 倍。
  • 与头文件完全兼容(混合模式)。
  • 能够为标准库创建模块(实验性)。


4. constexpr 和 consteval 的新功能

扩展常量表达式的上下文是 C++ 发展的主要目标之一。在 C++23 中,允许将 constexpr 用于:

  • 动态内存分配(std::vector 和 std::string)。
  • 调用虚函数。
  • 无精度损失的浮点运算。

这使得在编译阶段可以执行更多的计算,从而加速运行时。



5. [[assume]] 属性——给优化器的提示

新的 [[assume(表达式)]] 属性告诉编译器,该表达式在代码的这一点为真。这提供了:

  • 更激进的优化(删除分支、循环折叠)。
  • 在关键部分(游戏引擎、嵌入式系统)提高性能。


6. 简化多线程

添加了新的同步类型:性能改进的 std::counting_semaphore 和用于一次性屏障的 std::latch。此外,还增加了对 std::mdspan

推荐库