C++ Contract Programming:C++20 契约编程与断言

好的,各位观众,欢迎来到今天的C++契约编程讲座现场!今天咱们要聊聊C++20里一个挺有意思,但可能被大家忽略的小伙伴——契约编程。 一、契约编程:你情我愿的君子协议 先问大家一个问题,写代码的时候,你有没有遇到过这样的场景: 一个函数要求参数必须是正数,你没加判断,结果传进去个负数,程序崩了! 一个容器要求非空,结果你传进去一个空的,程序行为异常了! 这些问题,本质上都是因为调用者和被调用者之间,对于函数或者类的行为,没有明确的约定。调用者不知道被调用者有什么要求,被调用者也不知道调用者会传什么烂摊子过来。 契约编程,就是要解决这个问题。它就像一份君子协议,明确规定了函数或类的前置条件(precondition)、后置条件(postcondition) 和 不变量(invariant)。 前置条件: 调用者必须满足的条件,才能安全地调用函数。相当于告诉调用者:“喂,哥们,想用我的函数,得先满足这些条件,不然我不伺候!” 后置条件: 函数执行完毕后,必须保证的条件。相当于告诉被调用者:“哥们,你执行完,必须保证这些条件成立,不然我就认为你没好好干活!” 不变量: 对象在任何时候都必须满 …