把auto带回家

C++0x把 auto 关键字改成了 自动类型声明关键字。

比如:

    map<string, map<int, vector<string> > >::const_iterator it = c.begin();

可以写成

    auto it = c.begin();

 

因为类型可以从 c.begin()推导,所以前面的类型声明是重复的。DRY(Don't Repeat Yourself)

 

gcc 4.4 就开始支持这 C++ 0x特性, Visual C++ 2010也支持。

 

现实

但我们平时使用的 gcc 很多版本都还很低,这该怎么办呢?

 

方案

gcc 扩展 typeof 帮你忙

linux中也有代码使用 typeof

上例可以改成:

typeof(c.begin) it = c.begin();

 

代码少了很多,但是 c.begin()还是重复了。不过这次的重复是文字上的重复,好解决,宏。

 

改进

#define AUTO_TYPE(name, value)  typeof(value) a = (value)

那么上例可以改成:

AUTO_TYPE(it, c.begin());

 

美化

JS, PHP等脚本使用 var来定义变量,可以改的更直观

        #define VAR(name, op, value) typeof(value) name = (value)

使用:

        VAR( it, =, c.begin());

漂亮多了吧。

 

总结

以后,用这个宏,就可以减少很多代码重复了。嘿嘿,不错,没有C++0x,日子也能凑合着过。

 

背景知识:

typeof是gcc的扩展关键字, C++0x 把它标准化为 decltype

typeof 就像是 sizeof, 只是sizeof取的是大小, typeof取的是类型。

转载于:https://www.cnblogs.com/napoleon_liu/archive/2011/01/19/1938850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值