BOOST_STATIC_ASSERT与assert的区别
来源:互联网 发布:php自定义表单源码 编辑:程序博客网 时间:2024/05/22 14:24
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 :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言
而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 :
当条件可以在编译期进行求值
对类型的要求可以在编译期表示
你需要对两个或以上的整型常量间的关系进行断言
- 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宏的区别
- 关于RAC中的JOB运行在哪个实例的理解
- ui视图之uiimage
- Cron 常用表达式
- Sicily 1485 Hanoi双塔问题 (SOJ 1485) 【高精度】
- C++:接口继承和实现继承
- BOOST_STATIC_ASSERT与assert的区别
- 三层之上的设计模式
- 内核驱动之Linux进程调度
- 困难面前是消极懈怠还是积极应对
- Android联系人号码中横线的去除
- \tutorial_code\core\how_to_scan_images
- 用C++写的打印年历的小程序
- 内核驱动之Linux系统调度
- ui视图之uialertview