auto关键字在C++ 98/03 标准中与 static 关键字相反,用于修饰所有局部变量,即这个变量具有“自动”生命周期,但是这个规定没有任何实际的用处。因而在 C++ 11 新标准中修改了其用法,用于让编译器自己去推导一些变量的数据类型。如:
int a = 1; auto b = a;这里 b 的类型被声明为auto,编译器会根据 a 的类型推导出变量 b 的类型也是 int。但是这样的写法在实际开发中实用价值不高,所以auto一般会用于让编译器推导一些复杂的模板数据类型,简化语法。如:
std::map<std::string, std::string> seasons; seasons["spring"] = "123"; seasons["summer"] = "456"; seasons["autumn"] = "789"; seasons["winter"] = "101112"; for (std::map<std::string, std::string>::iterator iter = seasons.begin(); iter != seasons.end(); ++iter) { std::cout << iter->second << std::endl; }上面代码中迭代器变量iter其类型是std::map<std::string, std::string>::iterator,这一串的类型太长了,在 C++ 11 语法中我们可以使用auto关键字达到同样的效果:
std::map<std::string, std::string> seasons; seasons["spring"] = "123"; seasons["summer"] = "456"; seasons["autumn"] = "789"; seasons["winter"] = "101112"; for (auto iter = seasons.begin(); iter != seasons.end(); ++iter) { std::cout << iter->second << std::endl; }是不是方便了很多?