断言的使用
断言可以先计算表达式的真假,如果其值为假(即为 0),那么他先向 stderr 输出一条错误,然后调用 abort 终止程序运行。
断言分为:静态断言和动态断言。也即:编译期断言和运行期断言。
一、编译期断言
static_assert(expression, message)
实现了编译器的断言,也叫静态断言。会调用 abort 终止程序的运行。
- 如果第一个参数,常量表达式的值为 false,会产生一条编译错误
- 第二个参数就是错误提示字符串
使用 static_assert
可以在编译期间发现更多的错误,用编译器来强制保证一些约定,尤其是用在模板的时候。而且编译期间的断言,不会生成目标代码,因此也不会造成任何运行期间的性能损失。
注意:static_assert
的断言表达式的结果必须是在编译时期可以计算的表达式,即是常量表达式。如果使用变量,则会导致错误。
二、运行时断言
assert
是运行时断言,他用来发现运行期的错误,也就是说运行期间没有运行到的 assert
代码,是不会检测到的。对性能也有一定的影响。所以在发行版本中,assert 一般需要关掉。
assert(expression)
,运行期的判断,并且会强制终止程序。