C++23 发布:新标准关键变化概览

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

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

开始课程

C++23 发布:新标准关键变化概览



编程语言世界迎来了一项里程碑事件——C++ 国际标准化委员会 (ISO/IEC JTC1/SC22/WG21) 正式批准了该语言的新版本:C++23。这个接替 C++20 的版本并非革命性更新,但包含了许多期待已久且实用的改进,将使代码更简洁、更安全、性能更高。让我们来剖析最重要的新特性。



C++23 的主要新特性



1. std::print 和 std::println —— cout 的现代替代方案

这可能是日常编程中最显著的变化。标准库新增了基于 std::format (C++20) 强大格式化功能的 std::print 和 std::println 函数。现在,控制台输出不仅更方便,而且比使用 std::cout 快得多。

  • 示例: std::println("你好,{}!答案是:{}", name, 42);
  • 优势: 类型安全、语法可读性强、支持 Unicode。


2. deducing this (P0847R7) —— 显式指定 this

这是元编程和库创建中最强大的新特性之一。现在可以将对象 this 作为成员函数的参数显式传递。这解决了 lambda 和 CRTP (奇异递归模板模式) 的旧有问题。

  • 允许编写一个同时适用于 const 和非 const 对象的成员函数。
  • 简化了“按限定符重载”模式的实现。


3. 多维 operator[] (P2128R6)

一项期待已久的功能——现在 operator[] 可以接受多个参数。这对于处理多维数组的库(例如 mdspan 或自定义矩阵)至关重要。

  • 以前: matrix(2, 3) 或 matrix[{2,3}]
  • 现在: matrix[2, 3] —— 自然且简洁。


4. std::expected —— 函数式错误处理

异常和返回码的替代方案。std::expected<T, E> 类型要么包含一个有效值,要么包含一个错误。这在禁止使用异常的系统(嵌入式系统、操作系统内核)中尤其有价值。



5. 模块和概念的改进

模块 (C++20) 得到了修复和稳定。现在它们得到了编译器更好的支持。概念变得更加灵活,新增了在概念参数中使用 auto 的能力。



还有哪些值得注意的?

  • std::mdspan —— 用于处理数组的多维 span。
  • std::ranges 的修复 —— API 的稳定化和空白填补。
  • [[assume]] 属性 —— 向编译器提供优化提示。
  • 静态 operator() 调用 —— 可能性

推荐库