公告
记得每天来更新数据哦,更新站点排名靠前。

C++26标准投票意外失败!一个新特性引发争议

2026-11-11 13:58 4 次浏览 来源:CSDN资讯

不过,对于 C++ 社区来说,眼下最需要解决的,或许已经不只是 Contracts 究竟该不该进入标准,而是经历这场风波之后,委员会还能否重新建立起合作所需要的信任。简单来说,Contracts 是一种契约编程机制,旨在让开发者能够在代码中明确表达程序运行时需要满足的条件,例如函数调用前的前置条件、执行后的后置条件,以及程序执行过程中需要维持的不变量。Andreas Fertig 特别指出,如果最

编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

C++26 标准可能要延期了!原本被认为只是走个例行流程的国际标准投票,最终却出现了意想不到的结果。

2026 年 10 月 23 日,C++26 国际标准草案(DIS)进入 ISO(国际标准化组织)投票阶段,由各国国家标准机构投票表决。经过长达 12 周的投票,最终结果显示:Disapproved(否决)!

更值得注意的是,这次投票失败并非因为整个标准存在普遍性的技术问题,而是一个名为 Contracts(契约)的特性引发了巨大分歧。有些人认为,这项功能尚未准备好,不应该在 C++26 中发布。

而在此前,Contracts 已经经历了多年讨论,并且在 C++ 标准委员会内部多次获得多数支持。没想到,围绕这一特性的争议,最终竟演变成整个 C++26 标准的发布危机。

对此,C++ 标准委员会成员、参与德国投票代表工作的 Andreas Fertig 于 11 月 3 日专门撰文,直言这是一场「巨大的灾难」,并对整个 C++ 社区的处境表示遗憾。

C++26 数十年来首次在 DIS 阶段投票失败

很多人不解“这次投票失败,究竟意味着什么?”,其实 C++ 标准的制定并不是委员会内部讨论通过就能直接发布,还需要经过 ISO 的一系列标准化流程。

其中,DIS(Draft International Standard,国际标准草案)是正式发布国际标准之前的一个重要投票阶段。按照 ISO 的相关规则,标准草案需要获得至少三分之二的赞成票,才能通过这一阶段。

而这一次,C++26 没能达到要求。

Andreas Fertig 表示,据他目前掌握的信息,这是 C++ 历史上第一次出现 DIS 投票失败的情况。

他还专门查询了 ISO 系统,发现另一个类似案例是 2006 年的 ISO/IEC DIS 26926,也就是 C++/CLI 语言规范。当时,该项目最终被终止。

当然,他也强调,自己的查询权限可能无法覆盖所有历史记录,因此这一判断仍有一定范围限制。但无论如何,这次 C++26 投票失败的严重程度,已经足以引起整个 C++ 社区的关注。

一个 Contracts 特性,为什么能让整个标准卡住?

这场风波的核心,是 Contracts。

简单来说,Contracts 是一种契约编程机制,旨在让开发者能够在代码中明确表达程序运行时需要满足的条件,例如函数调用前的前置条件、执行后的后置条件,以及程序执行过程中需要维持的不变量。

它的意义在于,让代码不仅能够描述「要做什么」,还可以明确规定「在什么条件下才能这样做」。

不过,这项功能在 C++ 社区一直存在争议。

Andreas Fertig 回顾称,Contracts 并不是突然出现在 C++26 中的新提案。

早在 2019 年的科隆会议上,这项功能就曾以另一种形式进入 C++20 的标准草案,但又在同一次会议上被移除。

随后,C++ 标准委员会专门成立了研究小组,从 2020 年持续到大约 2024 年,对 Contracts 的不同设计及相关问题展开研究。研究小组完成工作后,将提案提交给 Evolution Working Group(EWG,语言演进工作组),经过多次会议讨论,最终以多数票将 Contracts 纳入 C++26。

到了 2026 年 3 月,C++ 标准委员会 WG21 对包含 Contracts 的 C++26 草案进行投票,同样获得了相当广泛的支持。

然而,事情在最后一步发生了变化。

当草案进入 ISO 国家标准机构(NB)的 DIS 投票阶段后,反对票数量最终导致其未能达到三分之二的通过门槛。

Andreas Fertig 根据国家标准机构提交的意见指出,反对的主要原因是部分机构认为,Contracts 这项功能目前还没有准备好进入正式标准。

双方各有坚持,标准委员会陷入僵局

事实上,让 Andreas Fertig 感到棘手的,不仅是投票失败本身,还有这次事件背后暴露出的协作问题。

按照他对过去 C++ 标准制定流程的理解,委员会成员通常会在新信息出现时充分表达意见。如果某项提议经过讨论后仍然没有按照自己的意愿修改,参与者一般会尊重最终决定,接受其他人的不同意见。

过去,国家标准机构通常也只有在出现新信息、发现程序错误或类似问题时,才会投票反对一项标准。

但这次情况发生了变化。

支持删除 Contracts 的一方认为,新的材料提供了足够理由,证明这项功能还不适合进入 C++26。

对此,Andreas Fertig 并不认同。他认为,重新提交一份包含旧有论点的提案,并不能算作真正的新信息。

问题在于,双方都已经在这项功能上投入了大量时间和精力。

支持 Contracts 的一方很难接受,一项经过多年开发、在委员会内部多次获得通过的功能,就这样被放弃。

而反对的一方同样投入了不少精力,甚至已经开展了替代方案的实现工作。

在 Andreas Fertig 看来,双方都很难轻易让步。

C++26 接下来怎么办?四条路都不轻松

那么,C++26 还有机会挽回吗?

Andreas Fertig 根据 ISO 的标准制定流程,列出了四种可能的处理方式:

  • 第一,修改标准草案,发起新一轮 DIS 投票。委员会可以调整现有草案,然后重新进入国际标准投票阶段。

  • 第二,将修改后的草案退回委员会阶段(CD)。重新进入委员会草案阶段,继续收集意见、讨论和修改。

  • 第三,将修改后的草案作为技术规范(Technical Specification)形式单独发布。暂时不将其作为正式国际标准发布,而是通过技术规范的形式继续推进相关工作。

  • 第四,直接取消当前项目。这也是最极端的一种选择。

但无论采用哪种方案,都意味着 C++ 下一代标准的发布时间将受到影响。

更重要的是,这四条路都需要 WG21 内部获得多数支持。

Andreas Fertig 特别指出,如果最终决定取消 C++26,那么按照他的理解,委员会可能需要退回 C++23,并直接推进 C++29。

这意味着,原本已经成功纳入 C++26 的功能,也需要重新通过提案流程才能进入 C++29。而且,每项功能都需要有人继续推动。如果原本的提案作者缺乏时间或动力,一些已经获得认可的功能甚至可能就此被遗漏。

因此,这并不只是简单地将 C++26 推迟几个月,而是可能让整个标准制定工作重新洗牌。

C++ 社区真正面临的,是信任危机

在文章最后,Andreas Fertig 表达了自己的强烈不满。

他表示,无论开发者是否喜欢 Contracts,是否认为它很重要,或者是否觉得它存在明显缺陷,这项功能都已经经过多年研究,并且以当前形式多次获得多数支持。

而这次投票结果动摇的,是整个 C++ 标准制定体系赖以运转的基础:信任与相互尊重。、

在他看来,ISO 标准本身就是多方不断妥协的结果。参与者不可能每次都得到自己想要的结果,有人赢,也有人输,但最终应该尊重集体决定。

然而,这次投票中,部分未能在此前讨论中获得支持的一方,最终选择在 DIS 阶段投下反对票。

这让原本建立在协作与信任基础上的标准制定机制受到了冲击。「达成共识需要信任,而这种信任刚刚遭到了动摇。」Andreas Fertig 写道。

值得注意的是,下一次 C++ 标准委员会会议将于 11 月 16 日举行。届时,如何打破当前僵局将成为首要任务。

而这场争议也很可能进一步影响 C++29 的开发进度。不过,对于 C++ 社区来说,眼下最需要解决的,或许已经不只是 Contracts 究竟该不该进入标准,而是经历这场风波之后,委员会还能否重新建立起合作所需要的信任。

来源:https://andreasfertig.com/blog/2026/11/cpp26-dis-failed-how-does-cpp-survive/

标签: c++ 开发语言