Gegeben die folgende Verwendung von auto
:
Es wäre ideal für C ++, i
als std::vector<int>::size_type
abzuleiten, aber wenn es nur den Initialisierer für i
betrachtet, würde es eine ganze Zahl sehen. Was ist der abgeleitete Typ von i
in diesem Fall? Ist dies die angemessene Verwendung von auto
?
Verwenden Sie decltype
anstelle von auto
, um i
zu deklarieren.
Noch besser: Verwenden Sie Iteratoren, um über den Vektor zu iterieren, wie die @ MarkB-Antwort zeigt.
Warum lösen Sie nicht Ihr Problem mit Iteratoren? Dann geht das Problem weg:
%Vor% Wenn Sie mit Hilfe von Indizes iterieren möchten, würde ich wahrscheinlich den Typ explizit explizit angeben: Sie wissen, was es ist. auto
wird in erster Linie für unbekannte oder schwer zu typisierende Template-Typen verwendet, glaube ich.
Die Antwort auf Ihre Frage "Ist dies die richtige Verwendung von Auto?" ist nein aus Gründen, die in anderen Antworten erklärt werden. Für den speziellen Fall des Durchschleifens des Inhalts eines Containers ist es am wahrscheinlichsten besser, wenn die for-Schleife auf einem Bereich basiert:
const Referenzzugriff auf Elemente, i
ist const int&
:
nicht konstanter Verweiszugriff, i
ist int&
:
Wert Zugriff, i
ist int
:
und so weiter. Dies funktioniert auch für C-artige Arrays.
auto
erhält den Typ ausschließlich vom Initialisierer. Andere Verwendungen werden nicht berücksichtigt, zumindest nicht, um den Typ der Variablen zu bestimmen. Um dies auch zu berücksichtigen, ist decltype
eine Option:
oder, Sie können die Schleife möglicherweise neu schreiben, um rückwärts zu gehen:
%Vor% oder, Sie können die Schleife for
vollständig vermeiden.