织梦CMS - 轻松建站从此开始!

罗索

boost之编译期断言BOOST_STATIC_ASSERT与assert的区别

落鹤生 发布于 2010-04-23 21:47 点击:次 
assert是运行期断言,也就是在编译期出现的错误,它不会提示; 而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。
TAG:

assert是运行期断言,也就是在编译期出现的错误,它不会提示;

而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。

比如下面的函数:

  1. void expects_ints_to_be_4bytes() 
  2.         BOOST_STATIC_ASSERT(sizeof(int)!=4); 
  3.         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

  • 当条件可以在编译期进行求值

  • 对类型的要求可以在编译期表示

  • 你需要对两个或以上的整型常量间的关系进行断言

 

(linzhangkun)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9235.html]
本文出处:百度博客 作者:linzhangkun
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容