什么时候应该使用assert()?

Wil*_*mKF 11 c++ assert

在与许多开发人员开发大型C++编程项目时,我们遇到了在代码中不恰当地使用assert()的问题,这导致了断言确实发生并且产品崩溃的质量差.

问题是适用于assert()的适用原则是什么?何时使用assert()以及何时不使用?是否有一个标准列表,每个断言应该通过才能合法?我们如何鼓励正确使用assert()?

作为第一个解决方案,我会说assert()应该只用于记录一个被认为无法达到的条件,并且应该在运行时将其识别为assert()故障,因为它会出现,因为编程假设正在被违反.

人们可以比这更好吗?你对assert()的体验是什么?

cod*_*nix 11

使用来自外部(方法外部或程序外部)的错误条件的异常,例如参数检查和缺失/有缺陷的外部资源,如文件或连接或用户输入.

使用断言来指示内部缺陷,如编程错误,不应发生的条件,例如类/方法不变量和无效的程序状态.