assert函数的功能不太明白

测试一个条件并可能使程序终止,能具体解释下吗
2024-12-14 18:39:58
推荐回答(1个)
回答1:

assert即断言,也即做出一些假设,程序运行时如果假设不成立,程序就会中断。
没有很多调试经验,可能不太理解断言在哪会用到,实际上我们在调试一个出错的程序时,由于程序出错的位置往往不是错误起因的位置,我们需要追溯错误的起源,就需要在前方的一定位置确保某个变量的值符合一定的条件。 比如VS有局部数组变量越界访问检查机制,如果函数中的数组被越界访问,在函数结束时会报错,但是我们并不知道具体是在哪次访问中越界了,我们可以在每次访问前用assert断言数组下标变量的值小于数组大小,这样如果发生越界访问就可以确定其具体位置。

百度百科中列举的一些使用断言的位置:
1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
3.使用断言测试方法执行的前置条件和后置条件
4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)