auto关键字
C++11之前,auto默认修饰函数的局部变量,限定变量的作用域及存储期。C++11中,auto称为类型说明符,使用它可以让编译器根据初始化代码推断出所声明变量的真实类型。例如,auto应用在下述变量定义中:
auto i = 10; //变量i为int类型
auto l = 10l; //变量l为long int类型
auto除了能够对不容易确定类型的变量根据表达式结果完成类型的自动推断,还能够简化编码。下述代码中操作map容器,其中变量类型使用auto关键字进行推断,而无需使用长类型名定义变量:
std::map<std::string, std::vector<int>>map;
for(auto value = begin(map); value != end(map); value++){
}
另外,在使用模板时,若某个变量的类型依赖于模板参数,不使用auto将很难确定变量类型,如有下列代码:
template <class T1, class T2>
void multiply(T1 x, T2 y)
{
auto result = x * y;
}
既然auto是根据表达式结果推导出变量类型,则使用auto时变量必须被初始化。此外,auto关键字不能直接用来声明函数的返回值类型,需要和decltype配合使用,此时auto当做返回值类型占位符,提示函数返回值类型由后面的decltype给出。下述代码给出了使用auto和decltype共同描述函数返回值的情况:
template<class T1, class T2>
auto multiply(T1 x, T2 y)->decltype(x * y)
{
}
C++14中改进了这种写法,可以使用auto直接推导函数返回值类型。