导读:C++委员会的标准与创始人之间的看法似乎有些不太一样,这样可能更利于技术和语言的创新。
负责C++语言标准的ISO C++ 委员会(WG21)已经批准 C++26 标准草案,委员会成员 Herb Sutter 将它描述为自 C++11 以来最引人注目的版本,其中包括合约(也称契约,Contracts)功能, C++ 的创始人 Bjarne Stroustrup(中译名比亚尼·斯特劳斯特鲁) 等人对此功能表示反对。
C++委员会在英国伦敦克罗伊登召开会议,并在3月28日批准了该标准。根据Sutter的报告,下一步将准备最终文档并提交国际批准。C++通常每三年发布一个新标准,委员会还通过了C++29的发布计划,并且C++29的开发工作已经启动。
Sutter表示道,合约是C++26的主要特性之一。它允许在函数声明中设置前提条件和后置条件,并在函数内部添加断言语句。该特性旨在提高C++代码的安全性和可靠性。
我们找到了描述 C++26 合约特性的论文[地址:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2900r14.pdf] ,文件上面指出,“在 C++ 中添加合约特性的背后有着一段漫长而曲折的历史。”
合约特性曾是 C++20 工作草案的一部分,但由于拟议设计发生了重大变化,WG21 在 2019 年将其暂时移除。
C++26提案自称是“为C++26打造最小化可行产品的计划的最终成果”。目前仍存在一些不足,例如不支持虚函数契约,不过预计未来版本会加入此功能。
Sutter 是合约功能的积极倡导者,他还在科罗拉多州奥罗拉举行的 CppCon 2025 大会上发表了关于“C++26 合约的乐趣”的演讲。
然而,创始人Stroustrup 并不认同这种观点。他在2025年的一次关于 C++26 合约缺陷的演讲中表示:“它被声称是一个最小可行产品。但它既不是最小,也不可行。”
Stroustrup还表示,他建议不要在C++中使用合约。“这会以非常晦涩的方式增加复杂性。它会根据代码出现的位置改变其含义……我非常担心这种复杂性,也担心我们是否能够正确使用它。”
而Sutter则指出,一些“聪明且受人尊敬的ISO C++委员会成员对合约机制仍存在技术方面的担忧”。
正因为如此,C++26标准的最终定稿投票并非全票通过,114票赞成,12票反对,3票弃权。然而,Sutter表示,“ISO C++委员会仍然希望保留合约机制,因此合约机制最终被保留在了C++26标准中。”
C++26 还引入了编译时反射功能(地址:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2996r13.html),即允许在不增加任何运行时开销的情况下检查和生成代码。
这与 Java 或 C# 等语言中的反射不同,后者是在运行时而非编译时工作的。
Sutter 称其为“C++ 有史以来表达高效抽象的最强大的新引擎”。
他还大力宣传了C++中内存安全性的改进。例如,通过定义未初始化读取的错误行为。在C++中,未定义行为(UB)是导致错误和漏洞的主要原因,因此委员会的目标是减少未定义行为,而这正是该项努力的一个典型例子。
此外,C++26 标准库业已经过强化。
Sutter 表示,当它在 Google 研发团队实施时,修复了一千多个错误,并将整个生产环境的段错误率降低了 30%。
作者:场长
本篇文章为 @ 行动的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 微信公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。