运行时断言与静态断言
头文件#include <cassert> 中的assert是运行时断言,即当程序运行到assert处并该函数的形参计算出来为FALSE。程序会出现报错并退出。如果程序不运行到assert函数处是不会报错的。而静态断言指的是在编译阶段就进行报错。静态断言的实现代码如下:
#define assert_static(e) \
do{ \
enum{assert_static__ = 1/(e)}; \
}while(0)
上面的代码利用了除0会导致编译器报错的特性实现静态断言。当该报错不会显示准确的报错信息。C++11已经引入了static_assert 函数。它需要两个参数,第一个为bool类型参数,其必须是可计算出来的常量。第二个为字符串类型。当断言报错后会显示字符串写明的报错信息。
使用示例:
template <typename t,typename u>
int bit_copy(t& a,u& b){
static_assert(sizeof(b) == sizeof(a),"the parameters of bit_copy must have same width.");
};
当编译进行函数实例化时,如果出现a 和 b 的参数类型不是相同的字节数就会报错,并显示字符串信息。
关注公众号《首飞》回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2,机器人学等机器人行业常用技术资料。