在此语法中,auto 的实际类型是什么?

In this syntax, what is the actual type of auto?

在 C++17 for 循环语法 for(auto [key, val]: students) 中,auto 替换了什么?

如果学生是,例如std::map<int,char*>,如果不是auto,会写什么?我不明白它甚至取代了什么。 [int,char*]?

type [a,b,c] 是一个 结构化绑定 ,那些迫使你使用 auto(可能用 const and/or 修饰&/&&).

但除此之外,如果 [...] 被替换为变量名,auto 将扩展为相同的类型。在

for (auto elem : students)

...auto 扩展为 std::pair<const int, char *>.

在结构化绑定中,它扩展为同一类型,但该类型的结果“变量”未命名。

然后,对于括号中的每个名称,引入一个引用(或类似于引用的内容),它指向该未命名变量的元素之一。

std::mapstd::pair<const int, char*> 填充,所以写这个循环的一种方法是

for (std::pair<const int, char*> pair : students)

我们也可以用std::tie来分隔这对,但是这个语法不能在循环中使用:

int key;
char* value;
std::pair<int, char*> pair;
std::tie(key, value) = pair;

语句 auto [key, val] 替换 std::tie。此语法称为 structured binding.