惯例引入头文件
#include <assert.h>
看一个例子
int main(int argc, char const *argv[]) { int i (1); int b = i + i; assert(b != 2); }
这是一个 1+1 的问题。。显然 b 等于 2
我加上这样一句话,就表示我代码到这里b一定不可以等于2,如果等于2了就返回一个错误信息
Untitled-1: Untitled-1.cpp:22: int main(int, const char**): Assertion `b != 2' failed.
看看静态断言
int main(int argc, char const *argv[]) { int i (1); int b = i + i; static_assert(sizeof(b)!=sizeof(i),"data type different"); }
两个参数,第一个参数是判断,第二个参数是提示信息
静态断言的好处是在编译的时刻就可以检查到断言的结果
Untitled-1.cpp: In function ‘int main(int, const char**)’: Untitled-1.cpp:23:5: error: static assertion failed: data type different static_assert(sizeof(b)!=sizeof(i),"data type different");
这里的报错就是我们之前设定好的
使用静态断言要注意,第一个参数必须是常量表达式,如果我在上面例子中写入 b != 2 就是使用错误
可以在文件中加入
#define NDEBUG
用来关闭断言