boost assert分析
2016-06-19 22:54
246 查看
取自boost1.61
boost assert用于检查逻辑上应该成立的条件,相比于标准库中的assert,boost assert更加灵活,可以在Debug模式下disable,可以在Release 下enable,可以自定义不成立时所执行的函数等,很小但很实用。
类似实现有Facebook folly的FOLLY_SAFE_CHECK和google chrome的 CHECK DCHECK。
可以学习的技术点:
1 # define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
msg 是一个常量字符串,是一个非0的指针,这样加在assert里,既不影响assert的判断,还能把msg打印出来。下面是一个类似的实现。
#define OTHER_ASSERT(expr, msg) assert((msg, (expr)))
2 BOOST_LIKELY 告诉编译器boost assert一般都是正确的,便于编译器优化。
boost assert用于检查逻辑上应该成立的条件,相比于标准库中的assert,boost assert更加灵活,可以在Debug模式下disable,可以在Release 下enable,可以自定义不成立时所执行的函数等,很小但很实用。
类似实现有Facebook folly的FOLLY_SAFE_CHECK和google chrome的 CHECK DCHECK。
可以学习的技术点:
1 # define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
msg 是一个常量字符串,是一个非0的指针,这样加在assert里,既不影响assert的判断,还能把msg打印出来。下面是一个类似的实现。
#define OTHER_ASSERT(expr, msg) assert((msg, (expr)))
2 BOOST_LIKELY 告诉编译器boost assert一般都是正确的,便于编译器优化。
<span style="font-size:18px;">#define BOOST_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)) #define BOOST_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))</span>
相关文章推荐
- 回信--5.19
- 设计模式之观察者模式之一、引出观察者mosh
- CSS filter滤镜属性
- mybatis_user_guide(5) 动态 SQL
- SPOJ 694 Distinct Substrings
- 我的自动化日记1——元素定位过程中的意外事故
- EasyUI初识
- TCP的SO_LINGER 选项
- asmack项目介绍
- js的HTML属性操作
- Android AsyncTask 源码解析
- search in 2d matrix and serach minimum in rotated array
- Android Fragment的设计模式:工厂模式
- hdu2047
- 推写拉读
- 【java】:selection doesn't contain a maintype
- Linux设备驱动入门----globalmem字符设备驱动
- 励志经典,持续收集ing....
- 微信6.0 ActionBar样式
- 毕业--永不再见