Auto-Initialisierung
-
Moin Moin, ich bins mal wieder.
Ich hab mir grad gedacht, dass man doch eigentlich für die Typen die es in C++ gibt (float, int, double ...) doch eigentlich eine eigene Klasse machen könnte, bei der der Konstruktor die Variable automatisch mit NULL initialisiert?class Int { public: Int() : Value(0) {} // == Operator. // != Operator. // += Operator. // ... private: int Value; };Dadurch hätte man doch eigentlich keine Verluse?
-
Der Implementierungsaufwand und die Nachteile der kapselnden Klasse sind wahrscheinlich nicht gerechtfertigt. Zumal der Fall, in dem arithmetische Typen automatisch auf Null gesetzt werden sollen (und dies nicht schon von Klassen wie Containern ohnehin getan wird), recht selten vorkommt.
Oder in welchem Kontext benötigst du das so oft?
-
diese wrapper klassen für die standard datetypen wurden hier doch schon öfters diskutiert, glaube ich.
das ist erstmal nicht schlecht, aber es hat einige nachteile
pros:
-bessere initialisierung (z.b. mit 0)
-operationen sind besser kontrollierbar (divison durch 0, overflows...)
-schnell, da cpu dies sofort unterstütztcontras:
-recht viel aufwand für so "wenig"
-langsamer da statt nur einer operationen noch viel mehr hinzukommt
-manchmal sind overflows nicht nur egal sondern sogar erwünscht und gewollt
-
Das ist dann wohl den Aufwand nicht Wert.
Ich frag mich aber grad, wieso viele eigene typedefs der Variablen nutzen? Beispielsweise nutzt Microsoft immer INT, BOOL, FLOAT, ... anstatt int, bool, float, ...
Welchen Sinn hat das denn?
-
Mr. Potato schrieb:
Beispielsweise nutzt Microsoft immer INT, BOOL, FLOAT, ... anstatt int, bool, float, ...
INT und FLOAT habe ich noch nie gesehen. BOOL gibt es, weil die C-Compiler von Microsoft keinen eingebauten bool-Typ kennen.
-
Mr. Potato schrieb:
Das ist dann wohl den Aufwand nicht Wert.
Ich frag mich aber grad, wieso viele eigene typedefs der Variablen nutzen? Beispielsweise nutzt Microsoft immer INT, BOOL, FLOAT, ... anstatt int, bool, float, ...
Welchen Sinn hat das denn?
Abgesehen von dem Microsoft Zeug: bessere Namen. Steht in meinen "Golden Rules of Gameprogramming". Sehr nettes Buch btw.
typedef unsigned int u32; typedef int s32; typedef unsigned char u8; typedef char s8;Ich sehe am u dass es unsigned ist und wie breit der Typ ist.
-
Achso, und damit das ganze dann auch auf anderen Systemen die gleiche länge hat, nutzt man diese typedefs? Klasse, kommt gleich mal auf meine Liste!
Ich hoffe ihr hab nix dagegen wenn ich euch hier weiterhin mit Fragen über verwante Themen bombadiere

Wie ist das denn mit dem Default Constructor einer Klasse? Da kann man doch in der Initialisierungsliste gleich alles auf 0 initialisieren, oder hat man da geschwindigkeitsverluste?
Klassisches Beispiel: Ein Vector
// Initialisierung mit 0 class vec { vec() : x(0), y(0), z(0) {} float x; float y; float z; }; // Ohne Initialisierung class vec { vec() {} float x; float y; float z; }Wäre der Constructor ohne Initialisierungliste schneller als der mit?