断言

惯例引入头文件

#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

用来关闭断言

原文地址:https://www.cnblogs.com/qifeng1024/p/12641214.html