C++ auto
-
Michael E. schrieb:
Cyres schrieb:
Michael E. schrieb:
Oha? Wo ist denn die Genauigkeit festgelegt?
In der Anzahl der Bits in einer Variablen
Wer sagt mir denn, wie die Bits genutzt werden?
Es geht ja nicht darum, wie sie benutzt werden, sondern wieviele benutzt werden. Dass die Bits für eine 64-Bit Zahl mit einer 64-Bit-Architektur besser verarbeitet werden können, ist mir klar
-
Cyres schrieb:
Michael E. schrieb:
Cyres schrieb:
Michael E. schrieb:
Oha? Wo ist denn die Genauigkeit festgelegt?
In der Anzahl der Bits in einer Variablen
Wer sagt mir denn, wie die Bits genutzt werden?
Es geht ja nicht darum, wie sie benutzt werden, sondern wieviele benutzt werden.
...
-
Cyres schrieb:
Es geht ja nicht darum, wie sie benutzt werden, sondern wieviele benutzt werden.
Es kommt sehr wohl darauf an, wie sie benutzt werden. Vielleicht bilden je vier Bits eine Ziffer im BCD-Format. Vielleicht werden ein paar Bits überhaupt nicht benutzt. Vielleicht wird eine Darstellung gemäß IEEE 754 benutzt, vielleicht gibt es aber auch keinen Exponenten. Wie kannst du nun aus der Anzahl der Bits auf die Genauigkeit schließen?
-
Explizit ist besser als implizit, von daher ziehe ich den Typnamen auto vor.
So zeilenlange Typnamen wie hier als Beispiel gebracht entstehen bei mir auch nicht, da ich einzelne Typen frühzeitig als typedef verpacke.typedef std::shared_ptr<Widget> WidgetPtr; typedef std::map<std::string, WidgetPtr> WidgetMapping; typedef std::vector<WidgetMapping> WidgetMappings; WidgetMappings m_mapping;
anstatt
std::vector<std::map<std::string, std::shared_ptr<Widget>>> m_mapping;
-
@Ethon,
Wo genau siehst du nun den Vorteil gegenüberauto
, wenn irgendwo im Code fernab von deinen Typdefinitionen nun das folgende steht:WidgetMappings mapping = getWidgetMappings();
Gegenüber eben
auto
?auto mapping = getWidgetMappings();
Bei
auto
geht es viel eher darum Redundanz zu verhindern. Heisst der Typ, bzw. vielleicht besser die benötigte Schnittstelle, ist aus dem Kontext heraus bereits klar.Grüssli
-
Es geht nicht um Faulheit, sondern um Lesbarkeit. Wo die Erwähnung des expliziten Typs keinen wesentlichen Zusatzgewinn bezüglich Lesbarkeit bringt, da ist auto angebracht. Beispielsweise wenn ich ein std::map habe und ich möchte wissen, ob ein Element darin vorkommt, dann schreibe ich doch einfach:
auto it = myMap.find(myKey); if (it != myMap.end()) { ... }
Wenn ich diesen Codeausschnitt lese, dann verstehe ich auf Anhieb, was hier gemacht wird. Die Erwähnung des Iteratortyps bringt mir keinen Vorteil.
Man sollte sich bei der Formulierung von Code nicht an Bequemlichkeit orientieren, sondern klaren nachvollziehbaren Code schreiben. Das erhöht die Wartbarkeit und damit die Lebensdauer von Code.
-
Man sollte sich also nicht die Frage stellen
"Wieso sollte ich automatische Typdeduzierung der expliziten Typangabe vorziehen?" sondern
"Wieso sollte ich die explizite Typangabe der automatischen Typdeduzierung vorziehen?"