记录为什么迭代器类型用auto进行推导的一个原因

有如下代码:

std::map<std::string, int> str_int_map;
// ...

for (const std::pair<std::string, int> &item : str_int_map)
{
	// ...
}

尽管 item 并非严格意义上的迭代器,但总之是循环因子类似的东西,这段代码有意思的是,尽管指示了引用修饰符,但仍旧不是一段好的代码,原因在于 std::string 执行了复制操作。

为什么呢?

因为 map 的每个元素的类型实际是 std::pair<const std::string, int> , 而非 std::pair<std::string, int> 。由于类型不匹配,所以做了一份拷贝生成出匹配的类型对象。

如果使用 auto ,就会避免这样的问题:

for (const auto &item : str_int_map)
{
	//...
}
上一篇:函数练习题17


下一篇:C++ prime 第十一章