元编程能力大升级!ISO 委员会完成 C++26 特性冻结

元编程能力大升级!ISO 委员会完成 C++26 特性冻结

编码文章call10242025-08-02 15:26:113A+A-
作者 | Sergio De Simone
译者 | 田橙

本月早些时候,ISO C++ 委员会正式冻结了 C++26 的功能集,这标志着 C++ 的下一个主要版本迎来了一个重要里程碑。其中,编译时反射、契约、异步执行等众多备受瞩目的新特性赫然在列。

静态反射 (Static reflection) 支持在编译期对类型和行为进行自省,其目标是扩展 C++ 的元编程能力。在基础层面,反射允许开发者编写如下代码,轻松将枚举 (enum) 转换为字符串:

enum Color { red, green, blue };static_assert(enum_to_string(Color::red) == "red");

使用反射的表层语法非常简洁,这与 现代 C++ 的设计哲学 保持了一致。然而, 上述功能的底层实现却要复杂得多。尽管如此,我们依然可以从中一窥反射即将解锁的强大能力:

template <typename E> requires std::is_enum_v<E>constexpr std::string enum_to_string(E value) { template for (constexpr auto e : std::meta::members_of(^E)) { if (value == [:e:]) { return std::string(std::meta::name_of(e)); } } return "<unnamed>";}

反射将以一种早期形态首次亮相于 C++,并有望在未来的版本中不断演进。即便如此,它已然足够强大,足以支持一些高级用例,例如为 JavaScript 和 Python 等其他语言生成绑定。Herb Sutter 在其最新的 Trip Report 中如此描述该特性:

即便只是利用我们目前拥有的这部分初始反射能力,我们就已经可以对 C++ 类型进行反射,并利用这些信息加上普通的 std::cout,从而生成任意额外的 C++ 源代码,然后将这些新生成的代码在程序构建过程中一同编译并链接进去。

未来,利用反射,我们甚至有望通过“令牌注入”(token injection)的方式,在同一个源文件中直接生成 C++ 代码。

在最近的 ISO C++ 委员会会议上,被接纳进标准的新特性还包括:用于 Ranges 库 的并行算法;旨在异步上下文中通过 RAII(资源分配即初始化)风格编程来进行资源管理的 异步作用域 (async scopes);以及能为线程池提供高级执行上下文的 并行调度器 (parallel scheduler)。

此前会议中已接纳的一些主要特性包括契约 (contracts)、异步执行 (asynchronous execution) 以及众多其他功能,例如:通过包索引 (pack indexing) 增强模板元编程、用于包含二进制资源的 #embed 指令、边界检查迭代器和空指针验证、SIMD 并行等等。

契约 (Contracts) 旨在通过 [[pre:]]、[[post:]] 和 contract_assert 来支持“契约式设计”。该特性 原计划在 C++20 中引入,但最终从最终草案中被移除,如今它终于正式进入标准。

std::execution 提供了一套在通用执行资源上管理异步执行的机制。其核心概念是发送者 (sender) 和接收者 (receiver):发送者代表一个异步工作单元,它将其结果发送给接收者。该框架还由与异步操作相关联的状态 (state) 和一个轻量级调度器 (scheduler) 等概念共同构成。

C++26 的相关工作仍在继续,但正如 Sutter 所强调的,其完成进度比许多人预期的要快得多,目前 GCC 和 Clang 已经支持了约三分之二的已采纳语言特性。InfoQ 将持续关注并报道下一代 C++ 标准的演进过程。

原文链接:

https://www.infoq.com/news/2025/06/cpp-26-feature-complete/

今日好文推荐
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4