C++26国际标准草案遭否决,1998年以来首次DIS投票未通过
C++26 草案于2026年10月23日国家代表团投票中未获通过,系该语言标准化28年来首次在最终阶段被退回。核心争议点为契约编程(Contracts)特性,其设计复杂性引发多国代表担忧。整份草案连带...
C++26 的国际标准草案在2026年10月23日的国家代表团投票环节未能获得通过,这是自1998年C++首次成为ISO国际标准以来,首次在最终阶段(DIS阶段)被正式否决。此前,标准制定流程中最后一关——即由各成员国代表团对完整草案进行表决的DIS(Draft International Standard)投票——通常被视为形式性程序,极少出现实质性否决。上一次类似情况发生在2006年,涉及的是C++/CLI扩展规范,而非主语言标准本身。
C++标准制定采用多轮投票机制:前期由技术委员会内部完成细节审议与技术表决,最终提交至各国国家标准机构组成的代表团进行整体批准。DIS阶段要求草案整体通过,不支持拆分表决单项特性。因此,尽管草案中包含上百项无争议的小幅改进,以及静态反射、并发执行框架等重要新功能,但因一项核心特性——契约编程(Contracts)——引发分歧,整份文档被统一退回修改。
当参数违反pre条件时,行为取决于编译选项:可完全禁用检查、仅记录违约信息,或直接终止程序。该机制对库开发者尤为关键——编译器可据此推断某些运行时校验必然成立,从而优化生成代码;但这也带来矛盾:检查越严格,编译器可做的优化空间越小,性能与安全性之间形成拉锯。
该特性自2020年起设立专项研究组推进,历经四年多讨论与迭代,于2026年3月获技术委员会一致通过并纳入整版草案。然而,在最终政治层面的国家代表投票中遭遇阻力。三位委员会成员曾联合发表题为《Contract concerns》的技术评论,系统指出当前方案存在语义模糊、实现复杂度高、与现有工具链兼容性风险等问题。
目前,C++标准委员会面临两条路径选择:一是针对契约特性进行局部修订后重新提交DIS投票;二是直接移除该特性,保留其余内容推进。无论哪种方案,静态反射(static reflection)与并发执行框架(execution framework)等依赖或关联特性都将同步延期。这意味着原定于2026年底发布的C++26标准,实际落地时间至少推迟至2027年甚至更晚。
值得注意的是,标准延迟并不影响编译器厂商的产品节奏。主流实现如GCC、Clang、MSVC仍会按自身路线图发布新版本,并逐步集成部分已成熟的新特性。但因标准尚未定稿,厂商无法宣称“完整支持C++26”,相关宣传材料中的版本标识仍需谨慎标注。
对开发者而言,此次否决凸显了C++标准演进机制的双重性:一方面强调向后兼容与工业级稳健性,另一方面也导致创新特性落地周期漫长。相较之下,Rust等新兴语言采用模块化版本迭代策略,无需跨国共识即可逐项引入新功能,其演进效率形成鲜明对比。
从历史维度看,C++标准的每一次重大更新都伴随激烈争论:C++11引入移动语义与lambda,C++17强化并行与文件系统支持,C++20则带来模块、协程与概念(concepts)。而C++26本有望成为“安全增强一代”,通过契约机制推动防御性编程实践落地。如今这一进程受阻,意味着“让C++更安全”的目标至少再推迟一个版本周期。
值得强调的是,否决并非否定契约编程的价值,而是对其当前设计方案的审慎质疑。C++社区仍在持续探索更轻量、更易集成的替代路径,例如基于属性(attributes)或宏的轻契约方案。未来是否重启该特性,将取决于技术方案能否在表达力、实现成本与编译器友好性之间取得更好平衡。
标准制定的本质是共识构建,而非单纯技术优劣判断。C++26的折返提醒我们:一门服务数千万开发者的工业级语言,其演进必须兼顾创新锐度与生态稳定性。短期看是进度延迟,长期看或许是避免仓促引入高风险特性的必要刹车。
