Ich verwende so gut wie nie auto. Der Grund ist, dass man eben nicht am Namen einer Variable den Typen erkennt.
Wenn aus dem Namen und Kontext einer Variable normalerweise nicht klar ist, um was es sich wohl handeln muss, dann solltest du definitiv mal die Art und Weise wie du deinen Code strukturierst und Dinge benennst hinterfragen...
Es sei denn man verwendet noch ungarische Notation.
Von Ungarischer Notation würde ich erstens abraten und zweitens würde die auch nix ändern, weil man – zumindest bei der
"richtigen" ungarischen Notation – auch nicht den Datentyp in den Namen tut...
Meines Wissens nach ist "auto" auch nur wegen Templates eingeführt worden und sollte auch nur in diesem Zusammenhang verwendet werden.
auto wurde definitiv nicht nur wegen Templates eingeführt sondern ist generell sehr nützlich. Ich würde sogar soweit gehen, zu sagen, dass auto für Nicht-Template Code wesentlich mehr Vorteile bringt als für Templates. Kleines Beispiel:
ohne
auto:
|
C-/C++-Quelltext
|
1
|
std::vector<std::tuple<std::string, int, double>>::const_iterator found = std::find_if(std::begin(my_stuff), std::end(my_stuff), ...);
|
mit
auto:
|
C-/C++-Quelltext
|
1
|
auto found = std::find_if(std::begin(my_stuff), std::end(my_stuff), ...);
|
Man beachte, dass die zweite Variante nicht nur kürzer und wesentlich besser lesbar ist, sondern auch generischer. Wenn ich z.B. statt einem
std::vector auf einmal eine andere Art von Container verwenden wollte, müsste ich in allem Code, der bisher mit dem
std::vector gearbeitet hat überall die Datentypen anpassen. Dank auto funktioniert der selbe Code nun
einfach so für
alle sequentiellen Container; ich könnte statt dem
std::vector sogar auf einmal ein stinknormales Array verwenden ohne auch nur einen Buchstaben anpassen zu müssen...
Außerdem ist der Code wesentlich leichter lesbar.
Das kommt darauf an. Meistens sollte aus dem Kontext sowieso klar sein, um was es sich bei einer Variable handelt und wie sie verwendet werden kann.