#include <iostream>
#include <assert.h>
#include <exception>
#include "opencv2/highgui.hpp"
#include "opencv2/core/core.hpp"
int main()
{
try {
assert(1>2);
// CV_Assert(1>2);
} catch (Exception& e) {
std::cout << e.what() << std::endl;
}
}
assert.h中的assert 的作用是计算表达式 expression ,如果其值为假(即为 0),那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。注意:这里会调用abort直接终止程序。
而CV_Assert是计算表达式 expression ,如果其值为假(即为 0),那么它先向 stderr 打印一条出错信息,然后抛出异常。注意:抛出异常。
这就是两者的区别,如果使用CV_Assert,我们可以通过捕获异常而不是程序崩溃,而assert会直接导致程序崩溃。上面这段代码即可验证。
#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, CV_Func, __FILE__, __LINE__) )
opencv源码中可以看到,CV_Assert仅为一个宏定义调用了cv::error,其中cv::error作用为打印错误信息,并抛出异常。
void error( const Exception&