C ++ 11 Range-based for-Loop-Effizienz "const auto & i" versus "auto i"
In C ++ 11 kann ich einen Container wie folgt durchlaufen:
for(auto i : vec){
std::cout << i << std::endl;
}
Aber ich weiß, dass dies unnötig -unnötigerweise, da muss ich nurdrucken die Werte vonvec
- Erstellt eine Kopie von (BEARBEITEN: jedes Element von)vec
Also konnte ich stattdessen Folgendes tun:
for(auto &i : vec){
std::cout << i << std::endl;
}
Aber ich möchte sicherstellen, dass die Werte vonvec
werden niemals modifiziert und befolgen die Konstanten-Korrektheit, also kann ich tun:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Meine Frage lautet also: Wenn ich nur mussaussehen Bei den Werten eines Containers würde nicht die allerletzte Schleife (const auto &i
) immer vorzuziehen, da es effizienter ist, keine zusätzliche Kopie von (BEARBEITEN: jedes Element von)vec
?
Ich habe ein Programm, das ich entwickle, in dem ich erwäge, diese Änderung durchgehend vorzunehmen, da die Effizienz darin entscheidend ist (der Grund, warum ich C ++ an erster Stelle verwende).