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