编写代码时,我们总会做出一些假设,断言就是用在代码中捕获这些假设。断言表示为一些布尔表达式,我们相信在程序中的某个特定点该表达式的值为真,可以在任意时刻启用和禁用断言来验证。
举个例子,在离散数学中有个德摩根定律,我们在C++语言中可以验证:
#include<iostream>
using namespace std;
int main()
{
bool A = false;
bool B= true;
//德摩根率:
cout<<(!(A || B) == (!A && !B))<<endl; //输出1
cout<<(!(A && B) == (!A || !B))<<endl; //输出1
}
这种方式在开发中并不常见,而是使用以下断言的方式:
#include<iostream>
#include<assert.h>
using namespace std;
int main()
{
bool A = false;
bool B= true;
//德摩根率:
assert( !(A || B) == (!A && !B) );
assert( !(A && B) == (!A || !B) );
}
在这个程序中,并不会有任何输出结果,但是程序正常运行。
假如assert()函数中表达式出错,整个程序在运行的时候就会报错,并指出哪里出了问题。
所以今后在我们开发的时候可以运用这一特性,完成开发测试用例的编写:
assert(函数返回值 == 预期结果);
只要函数运行符合预期结果,程序正常运行,一旦不符合就会出错。
注意assert()不是函数,而是一个宏定义。