国际标准化组织 C++ 标准委员会(WG21)已正式敲定C++26标准。委员会成员赫伯・萨特评价,这是自 C++11 以来最具里程碑意义的版本。尽管 C++ 语言创始人本贾尼・斯特劳斯特鲁普等一众大佬公开反对,契约(Contracts) 功能依旧被纳入新标准。

本次委员会会议于伦敦克罗伊登召开,并在 3 月 28 日正式表决通过 C++26 标准。据萨特透露,下一阶段将整理定稿标准文档,提交国际层面审批。C++ 基本保持每三年更新一代标准,委员会同时敲定了 C++29 的研发日程,相关工作现已启动。

萨特表示,契约是 C++26 的核心重磅特性之一。该机制可为函数声明设置前置条件与后置条件,还能在函数内部嵌入断言语句,旨在提升 C++ 代码的安全性与健壮性。

一份介绍 C++26 契约特性的官方文档(PDF)提到:“为 C++ 引入契约机制,背后有着漫长且曲折的发展历程。” 契约原本曾纳入 C++20 工作草案,但由于设计方案经历重大调整,WG21 委员会在 2019 年将其从标准中移除。

此次 C++26 的契约提案,定位为打造一套最小可用版本。目前该功能仍存在短板,例如暂不支持虚函数契约约束,相关能力预计在后续版本补齐。

萨特是契约特性的坚定支持者,他曾在 2025 年于美国科罗拉多州奥罗拉举办的 CppCon 大会上,发表主题演讲,盛赞 C++26 契约设计带来的开发体验革新。

但斯特劳斯特鲁普持完全相反观点。他在去年的一场分享中,剖析 C++26 契约的诸多隐患时直言:“官方称这是最小可用版本,但它既不精简,也谈不上可用。”

斯特劳斯特鲁普明确建议开发者不要使用 C++ 契约功能。他认为:“该特性以极其隐晦的方式增加了语言复杂度,还会让代码语义随使用场景发生异变。我十分担忧其带来的额外复杂度,也怀疑开发者能否正确落地使用。”

萨特也坦言,不少业内公认资深且权威的 C++ 标准委员会成员,始终对契约存在技术层面的质疑。受此影响,C++26 标准最终表决并未全票通过:114 票赞成、12 票反对、3 票弃权。即便争议不小,萨特仍表示:“C++ 标准委员会整体仍认可契约的价值,因此该特性最终保留在 C++26 标准中。”

C++26 还新增编译期反射能力,可在无运行时开销的前提下实现代码自省与动态生成。这与 Java、C# 依托运行时实现的反射机制有着本质区别。萨特将其称作 “C++ 有史以来,构建高效抽象能力最强的全新底层机制”。

此外,C++26 在内存安全层面也迎来多项优化,例如明确未初始化读取属于错误行为。未定义行为一直是 C++ 程序漏洞与故障的主要诱因,缩减未定义行为范围也是标准委员会的核心目标之一,此次优化正是重要落地举措。

C++26 标准库也完成了安全性加固。萨特透露,谷歌内部落地适配新版标准库后,已修复千余处代码漏洞,生产环境段错误发生率直接下降 30%

另一大核心特性是 std::execution,该组件提供了异步执行编程框架。不过萨特也提醒,受限于文档不完善、标准库配套支持不全等问题,这项特性上手落地难度远高于普通 C++ 新特性