【发布时间】:2021-03-24 22:16:05
【问题描述】:
在与许多开发人员一起开发大型 C++ 编程项目时,我们遇到了在代码中不当使用 assert() 的问题,这会导致确实发生断言并导致产品崩溃的质量差。
问题是正确使用 assert() 的好的原则是什么?什么时候使用 assert() 合适,什么时候不合适?是否有一个标准列表,每个断言都应该通过才能合法?我们如何鼓励正确使用 assert()?
作为第一次破解,我想说 assert() 应该只用于记录一个被认为不可能达到的条件,并且应该在运行时将其标识为 assert() 失败出现是因为违反了编程假设。
人们可以做得比这更好吗?你对 assert() 有什么体验?
【问题讨论】:
-
当您知道必须满足某些条件才能使代码被视为“良好”时,请使用断言。如果断言失败,那么根据定义,代码必须被修复。
-
@Robert:同意+1,但必须考虑如果断言触发使程序崩溃,用户将损失多少工作。当浏览器丢失一组打开的标签时很烦人,但通常不是灾难;如果文字处理器因为断言而失去一天的工作,那将是一场灾难。困难的部分是 (a) 确定执行任何操作是否安全,以及 (b) 将系统保持在出现问题时可以恢复的状态。
-
一个整天没有保存工作的人会在断言发生时得到他应得的。