~~~~我的生活,我的点点滴滴!!
在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。各种作用域内声明变量都可以用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。
|
1
2
3
|
auto
i = 42; //
i is an intauto
l = 42LL; //
l is an long longauto
p = newfoo();
//
p is a foo* |
使用auto通常意味着更短的代码(除非你所用类型是int,它会比auto少一个字母)。试想一下当你遍历STL容器时需要声明的那些迭代器(iterator)。现在不需要去声明那些typedef就可以得到简洁的代码了。
|
1
2
3
4
|
std::map<std::string,
std::vector<int>>
map;for(auto
it = begin(map); it != end(map); ++it) {} |
需要注意的是,auto不能用来声明函数的返回值。但如果函数有一个尾随的返回类型时,auto是可以出现在函数声明中返回值位置。这种情况下,auto并不是告诉编译器去推断返回类型,而是指引编译器去函数的末端寻找返回值类型。在下面这个例子中,函数的返回值类型就是operator+操作符作用在T1、T2类型变量上的返回值类型。
|
1
2
3
4
5
6
|
template<typenameT1,
typenameT2>auto
compose(T1 t1, T2 t2) -> decltype(t1 + t2){ returnt1+t2;}auto
v = compose(2, 3.14); //
v's type is double |
本文介绍了C++11中auto关键字的功能变化及其应用场景。从类型推断到简化代码,尤其是在处理STL容器时,使得代码更加简洁易读。
789

被折叠的 条评论
为什么被折叠?



