把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取的是类型。

你可能感兴趣的:(auto)