C ++ 11 Wydajność pętli oparta na zakresie „const auto & i” a „auto i”

W C ++ 11 mogę iterować po pewnym kontenerze w ten sposób:

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

Ale wiem, że to niepotrzebnie -niepotrzebnie, ponieważ muszę tylkowydrukować wartościvec - tworzy kopię (EDYTOWAĆ: każdy element)vec, więc zamiast tego mógłbym:

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

Ale chcę się upewnić, że wartościvec nigdy nie są modyfikowane i przestrzegają poprawności, więc mogę:

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

Więc moje pytanie brzmi: jeśli tylko muszęPopatrz przy wartościach jakiegoś kontenera nie byłaby to ostatnia pętla (const auto &i) zawsze preferowane ze względu na zwiększoną efektywność braku dodatkowej kopii (EDYTOWAĆ: każdy element)vec?

Mam program, który opracowuję, w którym rozważam dokonanie tej zmiany, ponieważ wydajność jest w tym kluczowa (powód, dla którego używam C ++ w pierwszym miejscu).

questionAnswers(2)

yourAnswerToTheQuestion