你也可以通过我的独立博客 —— www.huliujia.com 获取本篇文章
assert简介
assert被C/C++用来判断某些条件是否成立,比如判断指针类型的大小sizeof(void*)是否大于8,或者判断malloc返回的指针是否为null。
assert的函数申明如下:
void assert( int expression );
如果expression为0,即false,assert就会把函数名,源代码文件名、当前行号发送给标准错误stderr,然后调用abort()终止执行。
什么时候使用assert
assert一般用于判断逻辑上一定为真的条件,如果条件不符合就会导致未定义行为(undefined behavior)时,就可以使用assert。
这里其实涉及到狭义约定(narrow contract)和广义约定(wide contract)的概念。所谓狭义约定,就是函数执行需要满足预定义的条件,如果不满足就会导致未定义行为,比如std::vector::operator[],如果传入的index等于或者超过vector的大小,就会导致undefined behavior。而使用广义约定的函数即使输入不符合预期,也不会出现未定义行为。比如std::vector::at(),如果输入的index超出范围