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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage