2014-10-24 5 views
5

C++ Guru Herb Sutter schlägt vor, dass wir fast immer "Auto" verwenden sollten. Er sagt dies auf seiner website und er wiederholte es kürzlich bei der CppCon 2014 conference."Immer Auto verwenden" in C++ 11?

Ich habe versucht, seinem Rat zu folgen, und ich bin nicht überzeugt. Gibt es jemanden hier, der mit Sutter stimmt und wer kann mir sagen, warum

auto gender = string{}; 
auto number = string{}; 
auto person = string{}; 

ist besser als

string gender, number, person; 

das ist, was ich in meinem Code am Ende zu schreiben, weil ich nicht das Auto ertragen konnte Stil.

Edit:

auto gender = string{}, number = string{}, person = string{}; 

ist auch eine Möglichkeit, aber meiner Meinung nach das ist noch schlimmer.

+7

Tun Sie sich und allen anderen einen Gefallen und verwenden Sie std :: string anstelle von string. – gnasher729

+4

Das Deklarieren mehrerer Variablen in einer Zeile ist normalerweise ebenfalls verpönt. – gnasher729

+0

Wenn Sie nur mit Vorlagen arbeiten, wird es sinnvoll sein, automatisch (fast ausschließlich) zu arbeiten. – Shaggi

Antwort

1

Das Auto-Schlüsselwort soll vor allem in Fällen verwendet werden, in dem Sie die Variable mit einem Wert initialisiert werden, da dies den Code besser verwaltbar in Fällen macht, wo Sie den Wert, den Sie die Variable initialisieren ändern mit:

uint16_t id_ = 65535; 

uint16_t id() 
{ 
    return id_; 
} 

auto myid = id(); 

Nein müssen den Typ von myid ändern, wenn id() Rückgabetyp ändert.

Und mit 14 C++ es wird noch besser:

uint16_t id_ = 65535; 

decltype(auto) id() 
{ 
    return id_; 
} 

auto myid = id(); 

Ändern der Art der id_ passt sich automatisch den Rückgabetyp von id() und die Art der myid.

In Fällen, in denen der Anfangswert der Variablen nicht mit einem Wert initialisiert wird und daher für die Initialisierung nicht von anderem Code abhängig ist, ist es sinnvoll, den Variablentyp explizit zu definieren, da das Auto-Schlüsselwort keine Wartbarkeit hinzufügen würde zum Code und der Syntax auto gender = string{}; ist weniger lesbar als string gender;.

+3

Sie haben in diesem Fall Recht. Aber die Frage betrifft einen Fall, in dem eine einfache Konstruktion eines Objekts mit einem Standardkonstruktor vorliegt. Ich habe keine Probleme mit Auto in der Situation, die Sie hier erwähnen, aber ich fühle, dass 'type variable' einfacher und lesbarer ist als' auto variable = type {} '. – oz1cz

+0

Ah, richtig, ich nahm an, dass es eine allgemeinere Frage war. Ihr Fall ist ein Beispiel dafür, warum er "fast immer" sagt. Wenn Sie Ihre Objekte in einem lokalen Funktionsbereich erstellen, macht es auch Sinn, dass Sie wissen, was der Typ ist und als solche eine Variable dieses Typs deklarieren sollte. 'auto' sollte für Variablen verwendet werden, bei denen Sie den Wert von woanders bekommen und von diesem Wert initialisieren können (dadurch wird der Code wartbarer, wie ich in meiner Antwort geschrieben habe). – heksesang

+0

Aktualisierte die Antwort, um die tatsächliche Frage besser zu beantworten. – heksesang