1.7 auto关键字的前尘后事

auto关键字在C++98/03标准中与static关键字用途相反,用于修饰所有局部变量,即这个变量具有“自动”生命周期,但是这个规定没有任何实际的用处。因而在C++11新标准中修改了其用法,用于让编译器自己去推导一些变量的数据类型。如:

int a = 1;
auto b = a;
1
2

这里的变量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;
}
1
2
3
4
5
6
7
8
9
10

上面代码中迭代器变量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;
}
1
2
3
4
5
6
7
8
9
10

是不是方便了很多?

上次更新: 2025/05/19, 16:52:22

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>