赞
踩
~~~~我的生活,我的点点滴滴!!
在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。各种作用域内声明变量都可以用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。
1
2
3
|
auto i = 42;
// i is an int
auto l = 42LL;
// l is an long long
auto p =
new
foo();
// 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
<
typename
T1,
typename
T2>
auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)
{
return
t1+t2;
}
auto v = compose(2, 3.14);
// v's type is double
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。