我应该什么时候使用(!somevar)vs essert()
When should I use if(!someVar) vs assert()?
我总是看到此语句的某种变体:
if(!someVar)// or whatever expression
{
someVar = new type; //or however the programmer wants to handle it
}
在代码中。我的问题是,何时应该偏爱这种错误检查方法()?哪些具体例子?在我看来,断言()可能是大多数时候的更安全的选择,因为您通常应该问自己为什么首先将无效或错误的值传递给了变量。然后,您是否应该使用IF(!expr)语句?
对于背景,我专门在C 和sustert.h标题中工作。
在您提供的代码示例中,程序员正在检查某个Var,如果SomeVar评估了Boolean false,则将其更改。在错误检查的概念中,您可以认为这是一个可恢复的错误(可以通过更改某些Var的值来解决错误)
)有了断言,您正在陈述某个Var必须是真实的,否则您无法从中恢复过的问题。通常,这仅在调试构建中运行,如果条件为false,则该程序将退出。
好吧,如果发生错误,assert
将崩溃程序。但是,您并不总是想要那个。例如,您可能想打开一个对话框,该对话框告诉用户一个错误,并使他们有机会保存他们的工作。
错误处理的常见选择是抛出异常。例外很棒,因为它们可以抓住,但是如果没有抓住,它们仍然像assert
一样崩溃该程序。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 什么时候在C++中返回常量引用是个好主意
- 什么时候调用析构函数
- boost odeint什么时候真正调用观测者
- 编译器对数组声明大小的计算。什么时候发生?
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 您应该在什么时候创建自己的异常类型
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 什么时候可以使用常量装饰调用我的重载函数?
- unordered_map什么时候返回 -1?
- QCoreApplication什么时候有效?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- 什么时候用指针调用C++类构造函数
- 我不明白在这个例子中什么时候调用构造函数
- 如果真的需要std::move,我们应该什么时候声明右值refs
- P1008("prohibit aggregates with user-declared constructors")在实践中什么时候有用?
- 我应该什么时候使用(!somevar)vs essert()
- 可变参数函数 - 我什么时候应该使用 &&...vs &...?
- 什么时候加载dll:隐式链接VS显式链接
- 我什么时候使用 "__attribute__((nonnull))" vs "not_null<T*>"?