基于范围的for循环auto自动推导出的类型是容器中的value_type,而不是迭代器
新的for循环,冒号后面的表达式只会执行一次
std::vector<int> arr = { 1, 2, 3, 4, 5 };
std::vector<int>& get_range()
{
std::cout << "get_range" << std::endl;
return arr;
}
for (auto val : get_range())
{
std::cout << val << std::endl;
}
输出:
get_range
1
2
3
4
5
而
for (size_t i = 0; i < get_range().size(); ++i)
{
std::cout << i << std::endl;
}
输出:
get_range
0
get_range
1
get_range
2
get_range
3
get_range
4
get_range