现在的位置: 首页 > 综合 > 正文

BOOST_STATIC_ASSERT与assert的区别

2014年11月20日 ⁄ 综合 ⁄ 共 595字 ⁄ 字号 评论关闭

assert是运行期断言,也就是在编译期出现的错误,它不会提示;
而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。
比如下面的函数:

void expects_ints_to_be_4bytes()
{
BOOST_STATIC_ASSERT(sizeof(int)!=4);
assert(sizeof(int)!=4);
}

编译的时候就会提示
static_assert.cpp: In function 'void expects_ints_to_be_4bytes()':
static_assert.cpp:11: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'
也就是BOOST_STATIC_ASSERT的断言。把这行改成BOOST_STATIC_ASSERT(sizeof(int)==4);再编译,不会提示错误。而assert(sizeof(int)!=4)这行在运行的时候 会提示错误。
所以,一个是编译期的断言,一个运行期的断言,两个可以起到很好的互补作用
以下情形下使用 BOOST_STATIC_ASSERT :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言

抱歉!评论已关闭.