C ++ 11 Eficiência do loop for baseado em intervalo “const auto & i” versus “auto i”

Em C ++ 11, posso iterar em algum container da seguinte forma:

for(auto i : vec){
   std::cout << i << std::endl;
}

Mas eu sei que isso desnecessariamentedesnecessariamente, desde que eu só precisoimpressão os valores devec - faz uma cópia de (EDITAR: cada elemento de)vec, então eu poderia fazer:

for(auto &i : vec){
   std::cout << i << std::endl;
}

Mas eu quero ter certeza de que os valores devec nunca são modificados e cumprem a const-correção, então eu posso fazer:

for(const auto &i : vec){
   std::cout << i << std::endl;
}

Então, minha pergunta é: se eu preciso apenasVeja nos valores de algum recipiente, não seria o último loop (const auto &i) ser sempre preferível devido ao aumento da eficiência de não ter uma cópia extra de (EDITAR: cada elemento de)vec?

Eu tenho um programa que estou desenvolvendo, no qual estou pensando em fazer essa mudança, já que a eficiência é crítica nele (a razão pela qual estou usando o C ++ no primeiro lugar).

questionAnswers(2)

yourAnswerToTheQuestion