您的位置:首页 > 其它

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一般都是正确的,便于编译器优化。

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: