assert高级用法


之前看到了一个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的缺点是只能在编译时判断,不能在运行时判断。


Author: 蒋璋
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 蒋璋 !