博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++11 static_assert
阅读量:4572 次
发布时间:2019-06-08

本文共 841 字,大约阅读时间需要 2 分钟。

c++中想要在编译时期进行断言,在之前的标准中可以采用1/0来判断,如下:

1 #include 
2 using namespace std; 3 4 #define assert_static(e) do{ enum{ assert_static__ = 1 / (e) }; } while(0) 5 6 template
7 int bit_copy(T& a, U& b) { 8 assert_static(sizeof(a) == sizeof(b)); 9 memcpy(&a, &b, sizeof(b)); 10 }11 12 int main() {13 int a = 0x2468;14 double b;15 bit_copy(a, b); 16 }

在c++11中,可以使用static_assert断言,且可以打印出具体的出错信息。static_assert接收两个参数,一个是断言表达式,此表达式需要返回一个bool值;另一个则是警告信息,通常是字符串。以上代码可以修改如下:

template
int bit_copy(T& a, U& b) { static_assert(sizeof(a) == sizeof(b), "the parameters of bit_copy must have same width"); memcpy(&a, &b, sizeof(b)); }

编译会得到如下信息:

error:static assertion failed: "the parameters of bit_copy must have same width."

 

转载于:https://www.cnblogs.com/sssblog/p/10178415.html

你可能感兴趣的文章
稳定App缓存
查看>>
购物车练习
查看>>
技能获取与C语言学习情况
查看>>
代码格式化、着色工具之 UniversalIndentGUI
查看>>
原生JavaScript实现评分效果
查看>>
QT的学习
查看>>
将不才则三军倾
查看>>
nginx设置开机启动
查看>>
priority_queue
查看>>
Octal Fractions
查看>>
Fragment 的生命周期及使用方法详解
查看>>
依赖注入及AOP简述(二)——工厂和ServiceLocator .
查看>>
《大道至简》第一章读后感
查看>>
.NET高性能框架Chloe.ORM-完美支持MySql
查看>>
Scalaz(24)- 泛函数据结构: Tree-数据游览及维护
查看>>
Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation
查看>>
dede:channelartlist currentstyle栏目高亮显示方法
查看>>
程序员眼睛的保护(爱护眼睛,你我做起)
查看>>
Python之路【第六篇】:socket
查看>>
android的用户定位(一)
查看>>