C ++ 11 Эффективность цикла в зависимости от диапазона «const auto & i» против «auto i»
В C ++ 11 я могу перебрать какой-то контейнер следующим образом:
for(auto i : vec){
std::cout << i << std::endl;
}
Но я знаю, что это без необходимости -ненужно, так как мне нужно толькоРаспечатать значенияvec
- делает копию (РЕДАКТИРОВАТЬ: каждый элемент)vec
так что вместо этого я мог бы сделать:
for(auto &i : vec){
std::cout << i << std::endl;
}
Но я хочу убедиться, что значенияvec
никогда не изменяются и соблюдают const-правильность, поэтому я могу сделать:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Итак, мой вопрос: если мне нужно толькосмотрю при значениях некоторого контейнера, не самый последний цикл (const auto &i
) всегда предпочтительнее из-за повышенной эффективности отсутствия дополнительной копии (РЕДАКТИРОВАТЬ: каждый элемент)vec
?
У меня есть программа, которую я разрабатываю, и в которой я собираюсь внести это изменение, поскольку эффективность в этом критически важна (причина, по которой я использую C ++ на первом месте).