我一直在研究OpenCV教程,并遇到了assert功能;它有什么作用?

答案

assert如果程序的参数被证明是错误的,将终止程序(通常带有消息引用声明的消息)。如果发生意外情况,则在调试期间通常使用它,以使该程序更明显。

例如:

assert(length >= 0);  // die if length is negative.

您还可以添加一条更有信息的消息,如果失败了,则可以显示:

assert(length >= 0 && "Whoops, length can't possibly be negative! (didn't we just check 10 lines ago?) Tell jsmith");

否则,

assert(("Length can't possibly be negative! Tell jsmith", length >= 0));

当您进行版本(非删除)构建时,您也可以删除评估的开销assert通过定义NDEBUG宏,通常带有编译器开关。绝不依靠断言宏运行。

// BAD
assert(x++);

// GOOD
assert(x);    
x++;

// Watch out! Depends on the function:
assert(foo());

// Here's a safer way:
int ret = foo();
assert(ret);

从调用Abort()的程序组合而不是保证做任何事情的组合,只能使用断言来测试开发人员假设的事物,而不是例如,用户输入数字而不是字母(应该是通过其他方式处理)。

来自: stackoverflow.com