Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151050
  • 博文数量: 31
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-09 02:20
文章存档

2012年(2)

2011年(18)

2010年(11)

分类: C/C++

2011-11-17 10:10:24

C++11之前,要得到一个表达式的类型,
需要大废周折。往往需要结合模板推导,才能间接的拿到类型使用,
很不直接,很难用。
在C里,更是不可想象。

现在有个全新的关键词[b]decltype[/b],做类型推导很容易。
例如,对于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)


 

阅读(1007) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~