什么时候应该使用 if(!someVar) 与 assert()?

When should I use if(!someVar) vs assert()?

我总是看到这种说法的某种变体:

if(!someVar)// or whatever expression
{
   someVar = new type; //or however the programmer wants to handle it
}

在代码中。我的问题是什么时候应该有人赞成这种错误检查方法而不是 assert()?有哪些具体的例子?在我看来,assert() 在大多数情况下可能是更安全的选择,因为您应该经常问自己为什么首先将 null 或错误值传递给变量。那么,您是否应该使用 if(!expr) 语句?

作为背景,我专门从事 C++ 和 assert.h header 的工作。

嗯,assert如果出现错误,程序会崩溃。但是,您并不总是想要那样。例如,您可能想要打开一个对话框,告诉用户错误并让他们有机会保存他们的工作。

错误处理的一个常见选择是抛出异常。异常很棒,因为它们 可以 被捕获,但如果它们没有被捕获,它们仍然会像 assert.

一样使程序崩溃

在您提供的代码示例中,程序员正在检查 someVar,并在 someVar 的计算结果为布尔值 false 时更改它。在错误检查的概念中,您可以认为这是一个可恢复的错误(可以通过更改 someVar 的值来解决错误)

对于 Assert,您是在声明 someVar 必须为真,否则出现无法恢复的错误。通常这只是 运行 在调试版本中,如果条件为假,程序将退出。