BOOST_STATIC_ASSERT与assert的区别

来源:互联网 发布:爱淘宝怎么推广 编辑:程序博客网 时间:2024/06/05 02:10
出处:http://blog.csdn.net/yockie/article/details/8952327

assert是运行期断言,也就是在编译期出现的错误,它不会提示;
而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。
比如下面的函数:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
  1. void expects_ints_to_be_4bytes()  
  2. {  
  3. BOOST_STATIC_ASSERT(sizeof(int)!=4);  
  4. assert(sizeof(int)!=4);  
  5. }  

编译的时候就会提示
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 :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言
0 0
原创粉丝点击