C++26引入了一些关键字和标识符: contract_assert。 ·特殊含义的标识符 pre 和post。 ·新头文件。 简单说,Contracts 就是把前置条件、后置条 件和断言提升为一等语言构件。跟 C的 assert 宏*相比: ·是语义化的(属于语言,不是宏文本替 换); ,跟函数声明一体,对调用者和静态分析器可 见; ·有很多违规处理策略:ignore / observe enforce / quick-enforce。

include int sqrt_int(int x) [^pre:x>= 0] [^post: return >= 0] contract_assert(x < 1000000); //...实现….. 有一个比较有意思的事情,Contracts 在2025 年 2月投票加入草案:100票赞成,14反对。 12 弃权。最终 C++26 版本投票是114赞成, 12反对,3弃权。 不过,Bjarne Stroustrup对当前版本的 Contracts 持明显批评态度,认为其“既不够 minimal,也不够 viable”,他不建议在生产代 码用当前形态的 Contracts。 但委员会多数还是倾向“先提供最小可用版本, 再在后续标准完善”,所以最终留在 C++26。

【瓜分奖池】语言级合约(Contracts) 第5张插图