之前看到了一个assert的高级用法,在assert失败的时候可以输出错误信息。
assert的高级用法
assert的高级用法是在assert后面加上一个字符串,这个字符串会在assert失败的时候输出。
#include <cassert>
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 2;
assert(a == b && "a != b");
return 0;
}
输出:
Assertion failed: (a == b && "a != b"), function main, file assert.cpp, line 6.
assert的原理
assert的原理是在assert后面加上一个表达式,如果表达式为false,就会输出错误信息。
#define assert(expression) (void)( \
(!!(expression)) || \
(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
)
assert的替代品
assert的替代品是static_assert
static_assert(a == b, "a != b");
static_assert的原理
static_assert的原理是在static_assert后面加上一个表达式,如果表达式为false,就会输出错误信息。
#define static_assert(expression, message) \
typedef char __static_assert__[(expression) ? 1 : -1]
static_assert的缺点
static_assert的缺点是只能在编译时判断,不能在运行时判断。