静态断言

发布时间 2023-12-04 17:04:15作者: Beasts777

文章参考:爱编程的大丙 (subingwen.cn)

1. 断言

定义:断言是程序测试的一种常用手段,通过将一个返回值总是为真的判断表达式放在语句中,用于排除一些逻辑上的错误。

语法:

  • assert(表达式):如果表达式为真,程序正常运行。如果为假,程序将会终止运行。
  • 头文件:<cassert>/<assert.h>

EG:

#include <cassert>
int main(void){
    int a;
    int b;
    cin >> a;
    cin >> b;
    assert(b!=0);		// 如果b!=0,程序正常运行。否则,程序中断。
    cout << "a / b= " << a / b << endl;
    return 0;
}

2. 静态断言

assert是一个运行时断言,也就是说,只有在程序运行时才能够执行。但有时我们需要在程序运行之前就进行一些逻辑判断,例如当前平台是32位还是64位,这时就需要用到静态断言。

特点:

  • 可以在程序编译阶段就进行检查。
  • 使用时不用引入头文件。
  • 可以自定义违反断言时的提示消息。

语法

static_assert(表达式, 警告信息);
  • 表达式:因为要在编译阶段就进行检查,所以必须是一个常量表达式,返回一个bool值。
  • 警告信息:是一个字符串,当表达式为false时进行警告。

EG:

// assert.cpp
#include <iostream>                                         
using namespace std;
  
int main()
{
    static_assert(sizeof(long) == 4, "错误, 不是32位平台...");
    cout << "64bit Linux 指针大小: " << sizeof(char*) << endl;
    cout << "64bit Linux long 大小: " << sizeof(long) <<endl;
    return 0;
}