range-based for loop 中最好使用auto,否则容易产生额外的拷贝
//比如定义一个map,key为std::string 类
map<std::string, int> key_value;
//这么做是完美的
for (const auto& kv : key_value) {
// kv.first, kv.second
}
//但是如果一定要把auto类型写出来 一定不要忘了 key 是 const
for (const std::pair<const std::string, int>& kv : key_value) {
}
//下面这种,如果没有给std::string 添加const,则会调用std::string的拷贝构造函数
for (const std::pair<std::string, int>& kv : key_value) {
}