C++ 断言
什么是断言
断言是一组代码,我们在其中放入一些表达式或条件,以检查条件是否为真或者检查表达式是否存在。
- 如果条件为真或者表达式存在,那么我们将在整数中得到true或值1,程序的下一行将顺利执行。
- 但是,如果断言中的条件为假或不存在,那么它将返回false,并作为整数返回0,我们的程序将被终止。
在断言中使用 ‘assert()’ 关键字,我们在其中放入表达式进行评估。断言的表达式可以与程序员对任何变量的假设或代码的任何语句相关。
示例,如果我们想要检查在程序执行过程中某个变量的值是否被更改为其他值,那么我们可以借助断言来进行假设。
语法:
assert(int expression)
C示例1
#include
#include
int main() {
int var= 65;
var=6+var;
var=var-45;
assert(var==45);
printf("if the value of var in assert condition is 26 this line will execute otherwise, our program will be terminated");
return 0;
}
输出:
解释:
在上面的代码中,我们有一个变量,它的初始值为65。之后,我们给这个变量加了6,所以现在它的值为71。然后我们从中减去了45,所以现在的值是26。
在assert条件中,我们放入了一个表达式,判断变量的值是否等于45。由于这是一个假条件,所以它将返回0,程序将中止,并且代码中的后续行将不再执行。
C示例2
#include
#include
int main() {
int var= 65;
var=6+var;
var=var-45;
assert(var==26);
printf("if the value of var in assert condition is 26 the, this line will execute. Otherwise, our program will be terminated");
return 0;
}
输出:
解释
在上面的代码中,我们在断言中设置了一个条件,即如果变量等于26,则返回1。因此,代码的下一行将顺利运行。
由于断言和错误处理非常相似,如果存在错误,我们可以进行错误处理并终止程序;否则,代码的其余部分将正常运行。
但是,断言和普通的错误处理之间存在很多区别:
- 断言通常用于逻辑上不正确的条件,而错误处理中我们处理代码中的不同类型的错误。
- 断言可以在运行时被忽略或禁用,但错误处理不可能。
- 错误处理一直被认为是编写代码的更好方式,而编写断言对于正常条件来说并不是一个好主意,因为它会严重影响程序。
如果代码中存在断言,我们还可以在编译时忽略断言。我们需要导入预处理指令 NDEBUG 。
C示例3
#define NDEBUG
#include
#include
int main() {
int var= 65;
var=6+var;
var=var-45;
assert(var==65);
printf("if the value of var in assert condition is 26 the this line will execute otherwise our program will be terminated");
return 0;
}
输出:
解释
在上述示例中,变量的值为26,断言中的条件为假。但是,程序不会终止,因为我们已经导入了预处理指令NDEBUG,并且断言被成功忽略。
还有一种概念叫做静态断言,它在编译时运行,而assert()仅在运行时使用。静态断言只在C++中可用,而在C语言中不存在。
C++示例
#include
#include
using namespace std;
int main() {
assert(10+6 == 19);
static_assert(10+6 == 19,"this is static assertion");
cout<<" this line can be executed if assertion return true"<
输出:
解释
静态断言在编译时检查,因此它会给出编译时错误,表示静态断言中的表达式不正确。我们在此代码中也有普通断言,但仅在运行时才会进行检查。