在此语法中,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::map
被 std::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.
在 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::map
被 std::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.