typedef oder struct
-
Hallo zusammen,
Aus Gewohntheit deklariere ich eigene Typen immer mittels dem keyword typedef.
Mir wurde aber gerade gesagt, dies ginge auch indem man einfach ein struct erstellt.Was empfehlt ihr in dieser Situation?
Gruss,
perf
-
Hallo,
Das eine hat doch mit dem anderen nichts zu tun. Man lediglich früher bei C "typedef struct" geschrieben wenn man eine neue struct deklarieren wollte.
Was für Typen willst du denn erstellen?
-
Ich vermute, du meinst, ob man
typedef struct { ... } Name;oder
struct Name { ... };schreiben soll. In C++ immer letzteres, warum auch nicht? Die erste Variante geht zwar auch, ist aber eigentlich nur ein Workaround für Leute, die in C nicht immer
struct Nameschreiben wollen. In C++ gehört dasstruct-Schlüsselwort aber so oder so nicht zum Typnamen, also braucht man diesen Workaround nicht.Und zu guter Letzt: Strukturen sind Klassen, und du schreibst ja auch nicht
typedef class { ... } MyClass;typedefbenutzt man ansonsten natürlich nach wie vor für das, wofür es gedacht ist.
-
mhm nein..
Ich dachte das eigentlich so.
typedef char myNewCharType;
oder
struct myNewCharTyp{
char somevarName;
}Aber in meinen Augen ergibt das letztere einfach 0 Sinn.
Gruss,
perf
-
perf schrieb:
Aber in meinen Augen ergibt das letztere einfach 0 Sinn.
Es macht nur einen Sinn: Die Typen werden als unterschiedlich betrachtet (was in manchen Fällen sinnvoll sein kann), das typedef erzeugt dem gegenüber keinen neuen Datentyp, sondern nur einen Aliasnamen.
-
Das macht schon sehr viel Sinn, da du so eine Abstreaktionsschicht hinzufügst über die du später bei Bedarf den konkreten Datentyp zentral an einer Stelle ändern kannst. Ist bei char recht ungewöhnlich (eventuell, wenn du mit char rechnest und später feststellst, dass du etwas größeres brauchst), aber bei Containertypen kann es schnell vorkommen, dass die erste Wahl nicht die beste war und dann ist es gut, nur eine Zeile ändern zu müssen. Oder weil man mal eben ausprobieren will, wie sich die Performance bei einem anderen Container verhält.
-
Also für mich ergibt dein Beispiel nur den Sinn, dass du eben jetzt mehrere Unterschiedliche Namen für den Typ hast und diesen dann später leichter austauschen kannst.
Lg freeG