Это просто синтаксический сахар, поскольку стандарт говорит, что он эквивалентен циклу с итераторами [ Edit : это означает, что он не предоставляет никакой дополнительной информации компилятору по сравнению с эквивалентом для цикла - конец редактирования ].Вы можете получить более высокую производительность, хотя она эквивалентна:
for(auto iter = con.begin(), end = con.end(); iter != end; ++iter)
{
auto& ref = *iter;
// ...
}
, в то время как большинство людей могут написать:
for(auto iter = con.begin(); iter != con.end(); iter++)
{
// use *iter directly
// ...
}
, что может быть медленнее, если con.end (), iter ++ или* iter не тривиальны.
[ Edit :
лямбда - синтаксический сахар
Не совсем.В отличие от цикла for, он позволяет компилятору захватывать базовый указатель стекового фрейма напрямую, для переменных, захваченных по ссылке, это сохраняет одно косвенное обращение к адресу при каждом использовании по сравнению с функциональным объектом ручной работы.- конец редактирования ]