關於斷言,可以作為一種很強大的調試方式或者程序運行時的錯誤診斷
但是斷言也不是適合於各種地方,服務器軟件和嵌入式程序一般不適用,斷言會強制中斷正在運行的程序,對於服務器等程序來說,
將會是一個災難。加上,斷言會加劇CPU 的負載,其中會調用一些函數。
作為調試時使用斷言是個不錯的選擇
一般斷言:
#ifndef NDEBUG
assert( conditon ) ;
#endif
這樣,你的斷言會在沒有定義NDEBUG 的時候檢測是否assert(..)中的表達式為真,如果不為真,將終止程序
但是,作為一種調試方式,assert()一般不用於判斷用戶的輸入,而是斷言程序在某個時刻的狀態一定為真,當然,終止程序的方法有點粗魯,但是比起讓錯誤的程序繼續執行更加有效
下面是靜態斷言
為什麼使用靜態斷言?
靜態斷言可以在編譯時就對程序的錯誤做出判斷,而普通斷言只能在程序運行出現錯誤的時候做出退出並產生調試信息
static_assert(condition,string_condition);
第一次參數是表達式,第二個參數是輸出的信息
static_assert()是C++ 新增的內容
在C語言裡可以這樣實現:
#define JOIN( X , Y ) JOIN_AGIN( X, Y )
#define JOIN_AGIN(X,Y) X##Y
typedef static_assert(e)\
typedef char JOIN(assert_failed_at_line,__LINE___) [(e)?1:-1]