ASSERT
为了防止程序猿自己写法错误导致的问题,就会使用断言,格式为
assert(condition);
condition为真,则不进行任何操作;
condition为假,则程序中断,打印导致此条件成立的信息。
int a = 0;
int b = 1;
assert(a!=0);
cout << b/a << endl;
STATIC_ASSERT
附带提示消息的断言,格式为:
static_assert(condition,tipString)
例如:
static_assert(!std::is_arithmetic<int>::value, "only supports arithmetic types");
关闭断言
#define NDEBUG
#include <assert.h>
关于啥时候用断言啥时候用异常,网上有这几种说法:
-
assert用在那些你知道绝对不会发生的事情上,属于绝对的人为错误,比如函数参数的形式错误等(即调用前),异常用于参数正常但结果异常的情况,比如执行后的结果不符合预期;
- try-throw-catch无法关闭,assert可以通过关闭调试开关关闭,而且当机立断,执行快。
(网上很多说debug版本与release版本,release版本断言不生效,暂时还不知道是啥意思)