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