C ++ 11 auto und size_type

8

Gegeben die folgende Verwendung von auto :

%Vor%

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 ?

    
Kai 27.03.2012, 23:08
quelle

4 Antworten

20

Verwenden Sie decltype anstelle von auto , um i zu deklarieren.

%Vor%

Noch besser: Verwenden Sie Iteratoren, um über den Vektor zu iterieren, wie die @ MarkB-Antwort zeigt.

    
Praetorian 27.03.2012, 23:18
quelle
13

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.

    
Mark B 27.03.2012 23:15
quelle
7

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& :

%Vor%

nicht konstanter Verweiszugriff, i ist int& :

%Vor%

Wert Zugriff, i ist int :

%Vor%

und so weiter. Dies funktioniert auch für C-artige Arrays.

    
juanchopanza 28.03.2012 06:16
quelle
3

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:

%Vor%

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.

    
hvd 27.03.2012 23:17
quelle

Tags und Links