找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

C++11这些令人无比愉悦的改变(2) -- decltype

[复制链接]
admin 发表于 2013-12-24 09:57:56 | 显示全部楼层 |阅读模式
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.
  • #define REG32WRITE(reg,field,val)                 \
  • do{                                               \
  •   uint32_t regTmp = reg.as32BitValue;             \
  •   ((typeof(reg)*)&regTmp)->field = (val);         \
  •   reg.as32BitValue = regTmp;                      \
  • }while(0)


复制代码

(转载请注明来自:nuvoton-m0.com)
牛卧堂
回复

使用道具 举报

myl593799546 发表于 2014-1-16 13:47:30 | 显示全部楼层
跟强制转换结果一样么?会不会截取高地位?
回复 支持 反对

使用道具 举报

maoshen 发表于 2014-12-15 17:03:53 | 显示全部楼层
学习学习学习
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU