C++23 是 C++ 编程语言的最新标准(截至 2025 年5月初),C++23 的正式名称为 ISO/IEC 14882:2024,它在 C++20 的基础上引入了多项新特性和改进。以下是 C++23 的主要更新内容分类详解:
一、核心语言特性
-
if consteval
-
允许在编译时检测当前是否在常量求值上下文中执行:
-
-
#elifdef 和 #elifndef
-
简化条件编译:
-
-
多维下标运算符(operator[] 支持多参数)
-
允许自定义多维容器的访问方式:
-
-
静态 operator()
-
支持静态成员函数的函数调用运算符:
-
二、标准库增强
-
std::mdspan(多维数组视图)
-
非 owning 的多维数组引用,类似 std::span 的多维版本:
-
-
std::print 和 std::println
-
类型安全的格式化输出(需包含 <print>):
-
-
std::stacktrace
-
运行时获取调用栈信息:
-
-
std::expected
-
表示可能出错的操作结果(类似 Rust 的 Result):
-
-
std::generator(协程生成器)
-
简化协程生成器的实现:
-
三、语法糖与便捷改进
-
[] 支持静态成员
-
静态成员可直接通过 [] 访问:
-
-
constexpr 扩展
-
更多标准库函数标记为 constexpr(如 <algorithm> 部分操作)。
-
-
[[assume]] 属性
-
向编译器传递优化假设:
-
四、兼容性与废弃项
-
移除 std::aligned_storage
-
因易误用,推荐改用 alignas 或 std::aligned_alloc。
-
-
volatile 限制
-
对 volatile 的某些用法(如成员函数)加强约束。
-
五、编译器支持状态
特性 |
GCC |
Clang |
MSVC |
if consteval |
13+ |
16+ |
19.30+ |
std::mdspan |
❌ |
❌ |
19.30+ |
std::print |
❌ |
❌ |
19.30+ |
std::expected |
❌ |
❌ |
19.30+ |
六、示例代码(C++23 新特性综合)
#include <stacktrace>
int main()
{
std::println("Stacktrace:\n{}", std::stacktrace::current()); // 打印调用栈
auto parse = []() -> std::expected<int, std::string> { if consteval { return 42; } // 编译时分支
else {
return std::unexpected("Runtime error");
}
};
}
建议使用最新编译器(如 GCC 13+ 或 MSVC 2022 17.6+)并添加 -std=c++2b 标志体验这些特性。