C++11引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,还能简化书写,提高编码效率。
1.auto类型推导
1.1 auto关键字的新意义
在go语言中,在方法范围中声明的变量可以具有类型推导,例如:
var i = 10; //在go中自动类型推导变量i为int型
而C++11中也拥有了类似的功能:auto类型推导,其写法如下:
auto i = 10;
下面我们看一下auto的一些基本用法:
auto x = 5; //OK: x是int类型
auto pi = new auto(1); //OK: pi被推导为int*
const auto *v = &x; //OK: v是const int*类型,u是const int类型
static auto y = 0.0; //OK: y是double类型
auto int r; //error: auto不再表示存储类型指示符
auto s; //error: auto无法推导出s的类型
在上面的示例中:
1)字面量5是一个const int类型,变量x将被推导int类型(const被丢弃,后面说明),并被初始化为5;
2) pi的推导说明auto还可以用于new操作符,在例子中,new操作符后面的auto(1)被推导出int(1),因此pi的类型是int;
3) 由&x的类型为int,推导出const auto中auto应该是int,于是v被推到const int,而u则被推导为const int。