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).