免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2475 | 回复: 0
打印 上一主题 下一主题

[C++] [转] C++11这些令人无比愉悦的改变(2) -- decltype [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-17 10:24 |只看该作者 |倒序浏览
C++11之前,要得到一个表达式的类型,
需要大废周折。往往需要结合模板推导,才能间接的拿到类型使用,
很不直接,很难用。
在C里,更是不可想象。

现在有个全新的关键词decltype,做类型推导很容易。
例如,对于int x;
decltype(x)将自动替换成x的类型,写
decltype(x)  square_x = x * x;

相当于
int  square_x = x * x;

这样在一些类型难以确定的场合很有用。

这个需求由来已久,gcc有个扩展叫做typeof, 实现了一样的功能。
等到C++11普及后,有了decltype, 可以算是typeof的完全等价物,
就再也不需要去用这些不兼容的扩展功能了。

再一个例子,之前Coocox在新唐的Cortex-M0的代码里,实现寄存器位域赋值时,
为了抓取位域的类型,就用到了typeof.

  1. #define REG32WRITE(reg,field,val)                 \
  2. do{                                               \
  3.   uint32_t regTmp = reg.as32BitValue;             \
  4.   ((typeof(reg)*)&regTmp)->field = (val);         \
  5.   reg.as32BitValue = regTmp;                      \
  6. }while(0)
复制代码
(转载请注明来自:nuvoton-m0.com)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP