CV Assert和assert的區別

2021-10-01 06:08:10 字數 804 閱讀 4876

#include #include #include #include "opencv2/highgui.hpp"

#include "opencv2/core/core.hpp"

int main()

catch (exception& e)

}

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& exc )

if(breakonerror)

throw exc;

}

ASSERT和VERIFY的區別

assert和verify的區別 1 assert與verify巨集在debug模式下作用基本一致,二者都對表示式的值進行計算,如果值為非0,則什麼事也不做 如果值為0,則輸出診斷資訊。2 assert與verify巨集在release模式下效果完全不一樣。assert不計算表示式的值,也不會輸出診...

ASSERT VALID和ASSERT巨集分析

這個巨集都是mfc的除錯巨集.assert valid巨集用來在執行時檢查乙個物件的內部合法性,比如說現在有乙個學生物件,我們知道每個學生的年齡一定大於零,若年齡小於零,則該學生物件肯定有問題。事實上,assert valid巨集就是轉化為物件的成員函式assertvalid 的呼叫,只是這種方法更...

ASSERT VALID和ASSERT巨集分析

這個巨集都是mfc的除錯巨集.assert valid巨集用來在執行時檢查乙個物件的內部合法性,比如說現在有乙個學生物件,我們知道每個學生的年齡一定大於零,若年齡小於零,則該學生物件肯定有問題。事實上,assert valid巨集就是轉化為物件的成員函式assertvalid 的呼叫,只是這種方法更...