C++26 国际标准草案(DIS)在 ISO 最终投票阶段未能通过,导致下一版 C++ 语言标准的发布面临推迟风险。

此次投票失败的核心争议点在于“合同”(Contracts)功能的引入。该分歧在标准批准前的最后时刻爆发,使 C++ 技术维护者陷入严重对立。一方支持 C++ 创始人 Bjarne Stroustrup 的观点,后者强烈反对当前的合同技术方案,并认为批评者正在破坏 C++ 的开发过程。
ISO 投票未达门槛
10 月进行的 ISO 投票结果显示,有 13 票赞成,9 票反对,12 票弃权。根据国际标准化组织的要求,反对票比例不得超过 25%,而此次结果未能满足这一硬性指标,致使 C++26 DIS 草案被退回。
对于投出反对票的国家标准机构而言,合同功能的设计与实现是主要的阻碍因素。
合同机制引发技术路线之争
合同功能允许开发者在代码中定义前置条件、后置条件以及断言检查,旨在捕获可能导致未定义行为的编程错误。这种设计此前常见于 Ada 和 Eiffel 等编程语言。
尽管开发人员曾建议在 C++ 中加入合同支持,但由于担心默认值可能带来安全隐患,C++20 版本中突然移除了相关提案。然而,Stroustrup 推动将修订后的提案 P2900 纳入 C++26。
去年 8 月,Stroustrup 及其同事发表论文指出,P2900 合同及其扩展试图改变 C++ 的本质。他们批评该实现混乱、过时且测试不足,主张其更适合作为库来实现,而非语言核心特性。
C++ 标准化委员会成员 Andreas Fertig 对此持不同意见。他认为关于合同的讨论已持续多年,当前形式多次获得多数支持。Fertig 指出,建立在信任与尊重基础上的协作体系正因这场争论而动摇。
此外,鉴于 C++ 开发者容易无意中创建安全漏洞,部分项目已转向 Rust。反对者认为,如 Stroustrup 所指出的那样,增加此类控制机制可能会损害 C++ 作为高性能语言的核心优势。
社区反应与未来走向
Fertig 指责 Stroustrup 团队无法接受在标准化过程中的失利。他强调,每个 ISO 标准本质上都是妥协的结果,输赢乃常态,关键在于团队能否重建信任以决定下一步方向。
与此观点不同,维护开源 EDG C++ 编译器前端的 C++ 联盟首席执行官 Harry Bott 认为,合同讨论并未对 C++ 本身造成破坏。他在邮件中表示,草案被退回并非程序失败,而是程序按预期运作。他建议从中吸取教训,优化流程,以确保 C++ 能以可靠方式继续发展。
由于在标准化进程的最后阶段投票失败——这在 C++ 历史上极为罕见——新版本可能被非正式地称为“C++27”。若该语言的第八个版本明年发布,其正式名称将为 ISO/IEC 14882:2027。
目前,国际标准组织 C++ 工作组 WG21 计划下周在巴西布齐奥斯召开最后一次会议。据巴黎 Margo 咨询公司软件工程顾问 Thibault Ricord-Marchal 分析,后续可能有两种解决方案:
- 从规范中移除合同功能,以便其余 C++26 内容得以通过。但这需要撤销许多已基于合同完成的库硬化工作,过程将十分混乱。
- 将合同功能移至单独的技术规范中,以便在该独立文档中继续改进技术细节。





