写点什么

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

  • 2025-07-01
    北京
  • 本文字数:1275 字

    阅读完需:约 4 分钟

大小:562.83K时长:03:12
元编程能力大升级!ISO 委员会完成 C++26 特性冻结

本月早些时候,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/

2025-07-01 16:306311

评论 2 条评论

发布
用户头像
还在搞元编程特性,这些功能大多数情况下都用不着。安全编程才是重点。
2025-07-02 10:19 · 广东
回复
不知道委员会咋想的,更新的特性没有和安全编程相关的。
2025-07-02 10:19 · 广东
回复
没有更多了

CSS技巧:从高度0过渡到自动高度

南城FE

CSS 前端 动画

华为云耀云服务器L实例:智能、高性能、低成本的数字化助手

轶天下事

《三国杀》完成鸿蒙原生应用开发,更多游戏品类加入鸿蒙生态

最新动态

如何设置和使用 Proxifier教程

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

一种LED驱动专用控制电路方案

芯动大师

【云原生 | 最佳实践】一个实践驱动的云原生项目集—KubeWharf

计算机魔术师

字节跳动 云原生

探索未来云计算,华为云耀云服务器L实例引领行业新动力

平平无奇爱好科技

文心一言 VS 讯飞星火 VS chatgpt (147)-- 算法导论12.2 2题

福大大架构师每日一题

福大大架构师每日一题

INFINI Labs 产品更新 | 修复 Easysearch 跨集群复制索引同步问题,Gateway 内存异常增长等问题

极限实验室

Gateway 产品更新 easysearch 极限科技

【高效视频处理】一窥火山引擎多媒体处理框架-BMF

计算机魔术师

数字化时代的利器:华为云服务器L实例助力初创企业稳健成长

平平无奇爱好科技

我在平台与 AIGC 的交互组件一些设计经验

大东(AIP智能体运营专员)

使用极限网关助力 ES 集群无缝升级、迁移上/下云

极限实验室

console Gateway 数据迁移 极限网关 极限科技

淘宝API接口与用户体验分析

联讯数据

解锁中小企业上云智选,华为云这款服务器你值得拥有

平平无奇爱好科技

Linux的代理设置

Geek_bf375d

爬虫 代理IP 代理IP设置 跨境电商 HTTPS协议

SQL 算术运算符:加法、减法、乘法、除法和取模的用法

小万哥

MySQL 数据库 程序员 sql 后端开发

Spring Boot 外部化配置的应用

玄兴梦影

关于VO/DTO/DO/PO价值的思考

姚秋实(Nacol)

Java 设计模式 架构设计 架构师

数字化转型新篇章:华为云耀云服务器L实例引领初创与成长型企业向前

平平无奇爱好科技

性能卓越,部署无忧,华为云这款产品值得信赖

平平无奇爱好科技

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

源码星辰

Java 源码 智慧导诊 智能导诊

回顾2023,展望2024——小工程师的执着

工程师日月

#技术人的2023总结

传输黑科技下的全景之旅—浅谈开源项目E3PO的思路与功能

计算机魔术师

数字化浪潮下云计算如何服务?华为云这款服务器用实力说话

平平无奇爱好科技

元编程能力大升级!ISO 委员会完成 C++26 特性冻结_编程语言_Sergio De Simone_InfoQ精选文章