写点什么

元编程能力大升级!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:302

评论

发布
暂无评论

面试官:小伙子你给我说说MySql并发事务处理细节

Java 程序员 后端

面试官:谈谈你对线程池的理解

Java 程序员 后端

项目构建系统之 Maven

Java 程序员 后端

高可用RabbitMQ集群的搭建及原理分析

Java 程序员 后端

面试时通过volatile关键字,全面展示线程内存模型的能力

Java 程序员 后端

面试:第六章:面试题收集

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?

Java 程序员 后端

首全网发!2021最新版字节面经刷题笔记,已霸榜GitHub

Java 程序员 后端

高频MySQL面试题:MySQL 索引使用什么数据结构?为什么用 B+做索引

Java 程序员 后端

腾讯云TDSQL重磅发布全自研新敏态引擎

科技热闻

面试过阿里的P7大佬分享:180+道Java面试题目!含答案解析!

Java 程序员 后端

面试官:你如何利用-MySQL-Cluster-实现整体高可用?

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?(1)

Java 程序员 后端

2021年11月数据库排行解读:openGauss跃居第三,人大金仓晋身前十

墨天轮

MySQL 数据库 oracle TiDB 国产数据库

面试被吊打系列:气得我直接把简历上的精通数据库给删掉了

Java 程序员 后端

面试官都爱问的Spring源码:Spring与Mybatis高级整合

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?(1)

Java 程序员 后端

面试官:小伙子我们先来唠唠并发编程的几大核心知识点

Java 程序员 后端

双十一揭秘 1 :如何保证流量激发的时候不宕机?

青云技术社区

云计算 PaaS SaaS 云平台

面试官问我什么是扩展自适应机制

Java 程序员 后端

高可用延迟队列设计与实现

Java 程序员 后端

MatrixDB 从 4018 个参赛项目中脱颖而出,荣获 HICOOL 全球创业大赛第三名!

YMatrix 超融合数据库

时序数据库 分布式时序数据库 Hicool

面试官:多线程环境下,HashMap为什么会出现死循环?

Java 程序员 后端

面试被问Tomcat整体架构设计,我哭的像个孩子

Java 程序员 后端

高龄程序员的面临的处境:你有时候没有错,只是年纪大了

Java 程序员 后端

高并发下Mysql主从延迟处理方案

Java 程序员 后端

高并发负载均衡:网络协议原理(三)

Java 程序员 后端

面试官:Java-线程池中的线程复用是如何实现的?

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?

Java 程序员 后端

面试官:小伙子先来说一下可能引起Java内存泄露的场景吧

Java 程序员 后端

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 程序员 后端

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