assert,assert_static和static_assert区别
来源:互联网 发布:avr单片机和51的区别 编辑:程序博客网 时间:2024/06/05 05:40
assert没什么好说的,大家都见过了。
static_assert和assert_static是c++11中新增的宏定义。
assert适用于运行时的断言,也就是说,如果程序不运行,我们根本不知道有没有错,但是有些时候,我们希望在编译的时候就可以让编译器检测到错误,所以在c++11中新增了assert_static,也就是静态断言。例如:
#include <cstring>
using namespace std;
#define assert_static(e) \
do{ \
enum { assert_static__ = 1/(e)};\
}while(0)
template <typename T,typename u> int bit_copy(T&a,u&b)
{
assert_static(sizeof(a) == sizeof(b));
memcpy(&a,&b,sizeof(b));
}
如上我们用除以0会产生错误来实现静态断言,当实例化模板的时候,如果a和b的类型长度不一样,那么编译器就会产生错误。但是错误提示是“除以0错误”,这样子的错误提示对于不熟悉这个宏定义的人来说,简直就是天书,c++11为了解决这个问题又新增了一个叫做static_assert的东西,static_assert接受两个参数,第一个是判断表达式,第二个就是一个字符串的错误提示:
例如:static_assert(a==b,"a!=b");,当产生错误的时候,编译器就会提示:a!=b,这样就明显多了………………,也为我们苦逼的码农解决了生命。
0 0
- assert,assert_static和static_assert区别
- static_assert和assert的基本区别(可能不全)
- C++中#error/assert/static_assert的区别及使用
- boost.assert库 static_assert
- c++11:static_assert 与assert
- ASSERT()和VERIFY()区别
- ASSERT()和assert()的区别是什么?
- 问题: 什么是ASSERT()? ASSERT()和assert()的区别是什么?
- static_assert
- ASSERT和VERIFY的区别
- assert 和 if 的区别
- verify和assert的区别
- verify和assert的区别
- ASSERT和VERIFY的区别
- BOOST_STATIC_ASSERT和assert的区别
- assert ASSERT VERIFY 区别
- assert ASSERT VERIFY 区别
- 关于Assert和verify的区别
- Cocos2d-x使用iOS游戏内付费IAP(C++篇)
- JS操作JSON总结
- android自定义radiobutton、checkbox样式
- proxool中部分属性的介绍
- 牛不可怕,可怕的不仅比你牛还比你努力
- assert,assert_static和static_assert区别
- 广州.Net培训新西兰工作月薪两万
- 【大话QT之六】QT皮肤系统的动态切换
- iOS学习6:CoreGraphics简单绘图
- ffmpeg解析出输入中的原始音视频数据
- Android的一些开源项目集锦 以备以后研究
- java网络编程
- 在MAC电脑上抓取iphone数据包的方法
- js 动态生成json对象、时时更新json对象