2013-09-01 7 views
6

In C++ 11, wir werden ermutigt, Auto für Variablentyp
zu verwenden gilt dies auch beim Initialisieren Typ wie Klasse und Vektor?C++ 11 Initialisierung mit Auto

auto a = 10; 
auto b = MyClass(); 
auto c = vector<int>{1, 2, 3}; 

statt:

Ich meine wir sollten folgendes schreiben

auto a = 10; 
MyClass b; 
vector<int> c = {1, 2, 3}; 
+7

bitte nicht. Sie haben den Typ bereits geschrieben, also ist es nicht sinnvoll, 'auto' zu verwenden. –

+5

Herb Sutter empfiehlt dringend die Verwendung von 'auto'. Sehen Sie im folgenden Artikel [GOTW # 94 Lösung: AAA Style (fast immer Auto)] (http://herbsutter.com/2013/08/12/gotw-94-solution-aaa-style-almost-always-auto/) – nosid

+0

@KarolyHorvarth Ihre Antwort macht wirklich Sinn, aber der Link von Nosid argumentiert "Auto" führt zu einem saubereren Code ... – user350954

Antwort

13

auto ist nur eine praktische Abkürzung Dinge wie

VeryLongClassName *object = new VeryLongClassName(); 

Nun vereinfachen wird es sein,

auto *object = new VeryLongClassName(); 

Es gibt keinen Grund

auto a = 10; 
auto b = MyClass(); 
auto c = vector<int>(); 

zu schreiben, weil es länger und schwieriger zu lesen als

int a = 10; 
MyClass b; 
vector<int> c; 
+0

Danke, ich glaube wirklich, Ihre Antwort macht Sinn. In dem von @nosid angegebenen Link ermutigt Herb Sutter jedoch "Auto" für fast alles. Also, ich glaube ich diesen Stil für eine Weile versuchen und sehen, ob es Auswirkungen meiner Produktivität oder nicht ... – user350954

+0

Okay, ich habe gelesen, Herb Sutter. Er gibt drei Gründe, um Auto fast immer zu benutzen: Faulheit, Engagement, Lesbarkeit. Und ich stimme ihm vollkommen zu. Aber keiner dieser Gründe wird in Ihrem Codebeispiel angezeigt. Wenn Sie wirklich faul sind, werden Sie keinen komplexeren Code schreiben, der weniger lesbar ist. Ihr Beispiel zeigt den ** fast **, nicht den ** immer ** Teil. –

+2

@ mas.morozov, mit Auto a, b und c sind ausgerichtet, mehr ** Lesbarkeit ** IMHO – Zhen