委员会里 114 比 12 大胜,全世界投票说不行:C++26 史上首次被否决——当一门 40 多岁语言的创造者与所有者吵翻了
10 月 23 日,为期 12 周的国际投票结束,C++26 的最终国际标准草案(DIS)被正式否决。据标准委员会委员 Andreas Fertig 查证,在能查到的 ISO 编程语言标准记录里,除了 2006 年未获通过的 C++/CLI 草案(那个项目最终被终止)之外,几乎找不到第二例。C++ 四十多年的标准化历史,第一次在终点线前被拦下。
而最有戏剧性的部分是:把它拦下的争议,集中在一项叫 Contracts(契约)的新特性上;领衔反对的,恰恰是 C++ 之父 Bjarne Stroustrup。
契约是什么,为什么值得吵成这样
Contracts 想做的事并不复杂:让函数接口的前置条件、后置条件和断言成为语言的一部分。比如在函数签名里写一句「调用者必须保证除数不为零」,而不是散落在代码各处的临时断言。支持者认为这给调试、运行时检查和代码质量提供了统一机制——这套设计(提案 P2900)社区已经打磨多年。
反对者领头的正是 Bjarne。2026 年 8 月,Bjarne 等人提交文档《P2900 契约的根本缺陷》,质疑集中在三条:其一,这是会深刻影响语言语义的基础设施,在没有充分实现和大规模实践验证的情况下不该进标准;其二,ignore、observe、enforce 三种检查模式在不同编译配置下可能表现不同,跨翻译单元的一致性存疑;其三,保证机制、虚函数语义等关键问题没有解决,不能甩给未来版本。
这背后是两种工程哲学:一方认为先把多年讨论的实用方案纳入标准、后续迭代完善;另一方认为基础语言设施一旦进入标准就会影响未来几十年的代码,必须在发布前验证充分。两种立场都有道理,这正是它难解的原因。
最值得看的一道裂缝:委员会共识不等于国际认可
整个事件里最有信息量的,是这个对照。2026 年 3 月,WG21 在英国 Croydon 的会议上完成 C++26 技术工作,就是否保留契约做过一次全员表决:114 票赞成、12 票反对、3 票弃权——压倒性多数,契约留下,草案提交国际投票。七个月后,ISO 国家成员体的投票结果却是:Disapproved。
ISO 的规则有两道门槛:至少三分之二的参与投票 P 成员国赞成,且反对票不超过全部投票成员的四分之一。C++26 栽在了这里。需要说明:ISO 并未公布各国投票明细,网传的具体票数属于参与者披露口径,不是官方统计。
这道裂缝的名字叫:**WG21 的技术共识,和 ISO 的国际认可,是两道不同的门。**第一道门里 114 比 12 的大胜,到第二道门不作数。这像极了每一个做过政企项目的人都见过的场景——公司内部评审全票通过,到甲方与监管那里被打回:通过标准的人,和使用标准的人,从来不是同一批人。
投票失败后,委员会重要人物 Herb Sutter 发文,标题本身就是问题:《当一门语言的创造者与它的所有者发生严重分歧》。Bjarne 造了这门语言,但 C++ 不属于他;WG21 管技术演进,ISO 管最终批准,编译器厂商和全球开发者构成真实生态。他梳理了六条出路:并入 C++29 重来、移除契约重新投票、原样重投、有限修改(比如虚函数语义)再投、走国家标准体系另发、乃至更换标准化组织路线(归纳自论文与社区讨论,均非委员会决议)。下一次 WG21 全会 11 月 16 日至 21 日在巴西举行,这道题必须开始作答。

慢,有时候是机制在起作用
这件事最反直觉的判断是:它不是 C++ 的危机,而是机制的证明。
把它放进当下的时间轴里看更有意思。上周刚写过造 AI 的人先被 AI 闲置——那边是模型周更、灰度放量、随时回滚,快得让人焦虑;这周 C++ 给出另一个极端:一个特性讨论十几年,一次投票不通过就整个标准打回重来,慢得让人安心。模型发错了可以下线,标准发布出去就是几十年的承诺——写进教科书、写进编译器、写进数以亿行计的存量代码。带着根本分歧发布,撤回成本以十年计。
Hacker News 的讨论里还有一个清醒的提醒:标准不等于语言。开发者实际使用的 C++,由 GCC、Clang、MSVC 的实现决定,这次否决不会让编译器明天就变;但反过来,没有统一标准,编译器之间的分裂只会更大。Reflection、std::execution 这些已经就绪的特性被连坐推迟,确实可惜——但对一门还要服役几十年的语言,这可能是值得付的学费。
给做长期维护系统的团队一句实操:编译器版本要锁,新语言特性要等——特性进入标准只是开始,编译器全量实现、生态工具跟上、坑被别人先踩完,才轮到生产环境。我们给政企单位做长期维护的系统时一直守这条纪律,这次算是全行业看到它的必要性。
读票须知
其一,ISO 未公布各国投票明细,具体票数是参与者披露口径;其二,六条出路是论文与社区讨论的归纳,没有一条是 WG21 已通过的决议;其三,这次否决针对整个 C++26 草案而非仅契约,Reflection 等特性是被连累而不是被否决;其四,DIS 被否不等于 C++26 死亡——重新提交、退回委员会草案、发布技术规范、终止项目,ISO 流程里都还有选项。方向不掺水:把争议解决在发布之前,比按时发布一个带伤的标准更重要——对语言如此,对系统亦然。
参考来源
- Tony Bai:C++ 史上首次被否决!C++ 之父与标准委员会,终于闹掰了?(投票过程、P4334/P4454 全文梳理)
- Herb Sutter:P4454R0《当一门语言的创造者与它的所有者发生严重分歧》(原始论文)
- Bjarne Stroustrup:P4334R0《P2900 契约的根本缺陷》(原始论文)
- Andreas Fertig:C++26 DIS failed, how does C++ survive?(先例查证与影响分析)
- Hacker News:Herb Sutter: When a language’s creator and its owners strongly disagree(治理模式讨论)