Ja. auto
ist bevorzugt. Denn wenn Sie die Deklaration von v
von ändern:
std::vector<int> v; //before
dazu:
std::vector<float> v; //after
Wenn Sie int &
im for
verwenden, dann müssen Sie das auch ändern. Aber mit auto
, keine Notwendigkeit zu ändern!
Meiner Meinung nach ist die Arbeit mit mehr oder weniger wie programming to interface. Also, wenn Sie eine Operation +=
in der Schleife zu tun, und Sie nicht wirklich über die Art der Schleifenvariable e
solange die Art +=
Betrieb unterstützt, dann ist auto
die Lösung:
for(auto & e : v)
{
e += 2;
}
In diesem Beispiel, alles, was Sie interessiert, dass der Typ e
unterstützt +=
mit int
auf der rechten Seite. Es funktioniert auch für benutzerdefinierte Typen, die operator+=(int)
oder operator+=(T)
definiert, wobei T
ein Typ ist, der implizite Konvertierung von int
unterstützt.Es ist, als ob Sie die Programmierung Schnittstelle:
std::vector<Animal*> animals;
animals.push_back(new Dog());
animals.push_back(new Cat());
animals.push_back(new Horse());
for(size_t i = 0 ; i < animals.size(); ++i)
{
animals[i]->eat(food); //program to interface
}
Natürlich würden Sie diese Schleife wie so schreiben:
for(Animal * animal : animals)
{
animal->eat(food); //still program to interface
}
Oder einfach:
for(auto animal : animals)
{
animal->eat(food); //still program to interface
}
Es ist immer noch programming to interface.
Aber zur gleichen Zeit, den Kommentar der Punkt in @ David ist erwähnenswert.
Dies kann in beiden Richtungen gelesen werden, könnte es besser sein, einen Übersetzungsfehler zu erhalten, dass ein 'int &' kann nicht von einem 'float &' als die Compiler Code leise Annahme festgelegt werden, mit ints arbeiten ... Nicht gemeint war sagen, dass es eine bessere Idee zu haben ist 'int &', es hängt alles ab, was Sie tun, in dem Körper der 'for' Schleife, wenn es nicht auf der genauen Art abhängt' auto' besser –
@ DavidRodríguez-dribeas sein : Ich denke, was du gesagt hast, ist ein sehr ungewöhnliches Szenario. Normalerweise müssen wir "int" in "float" ändern, wobei "auto" eine bessere Lösung ist. – Nawaz
Einverstanden. In den meisten Fällen 'Auto &' tun ... aber ich bin noch nicht zufrieden mit Typen nicht explizit überall sein :) (außer, wenn ich weiß wirklich nicht will, zu!) –