BOOST_STATIC_ASSERT与assert的区别
来源:互联网 发布:爱淘宝怎么推广 编辑:程序博客网 时间:2024/06/05 02:10
出处:http://blog.csdn.net/yockie/article/details/8952327
assert是运行期断言,也就是在编译期出现的错误,它不会提示;
而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。
比如下面的函数:
编译的时候就会提示
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 :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言
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 :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言
0 0
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT和assert的区别
- [C++] BOOST_STATIC_ASSERT和assert的区别
- ASSERT与VERIFY的区别
- ASSERT与VERIFY的区别
- assert与if的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- MFC中VERIFY与ASSERT的区别
- ASSERT VERIFY TRACE的区别与应用
- debug 与ndebug的区别,assert用法
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- Android中IntentService的原理及使用
- [JavaEE - JPA] 6. ORM的核心注解 - 基础类型以及嵌套类型
- Coupons and Discounts(细节题)
- Linux升级内核
- Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
- BOOST_STATIC_ASSERT与assert的区别
- 洛谷 P1436 POJ 1191 [NOI1999 D1T2] 棋盘分割
- What is SHA-256?
- 51单片机—独立按键
- 向VS中手动添加研华板卡的控件
- C语言数据类型
- 09 final 字的引入
- Android报错合集,这个名字可行?
- [转]驱动开发的几种编译环境配置法