当我查看不同 STL 对象和函数的标准时,对我来说没有意义的一件事是为什么容器对象的 begin() 和 end() 函数会按值而不是通过常量引用返回迭代器?在我看来,迭代器可以由容器对象在内部保存,并在容器发生变异时进行调整。这将减轻在 for 循环中创建不必要的临时对象的成本,如下所示:
for (std::vector<int>::iterator it=my_vec.begin(); it!=my_vec.end(); ++it){
//do things
}
这是一个有效的担忧吗?是否有关于使用对迭代器的引用使这成为一个坏主意的东西?无论如何,大多数编译器实现都会优化这个问题吗?