原标题:《C ++26 Contracts: Introduction to Preconditions and Postconditions》 评分: 35 | 作者: ibobev 💭 五十页标准,最终不就是头文件里的 assert 吗? 🎯 讨论背景 C ++26 的 Contracts 提案拟为函数加入 Preconditions 和 Postconditions,让接口中的调用约束与返回保证成为标准语法,而不是散落在注释或实现内的 assert 中。这延续了 Eiffel(以 Design by Contract 著称的面向对象语言)的契约式设计思想,但 C ++ 社区特别区分内部编程错误的契约违例与必须处理的外部输入、业务错误。争议集中于其能否被编译器和 theorem prover(自动定理证明工具)静态验证并优化掉,以及写入 header 后是否会迫使引入完整类型定义、恶化大型项目的编译依赖。Racket(支持一等契约的 Lisp 方言)被用作更成熟的对照,而 LLM agent 的兴起又让显式、可机读的接口约束显得更有吸引力。 📌 讨论焦点 Contracts