Wo ist der Unterschied zwischen einer Struktur und einer Union?
-
Hallo,
wie schon der Titel sagt: Wo ist der Unterschied zwischen einer Sturktur einer einer Union?
Dummkopf
-
Struct & Union
Google, 1 Sekunde gesucht, erster Link.
Sogar auf Deutsch.
-
http://www.google.de/search?hl=de&q=C%2B%2B+Union&btnG=Google-Suche&meta=&aq=f&oq=
http://www.google.de/search?hl=de&safe=off&q=C%2B%2B+Struktur&btnG=Suche&meta=
-
Was macht es für einen Sinn, wenn die Daten einer uion sich alle an der gleichen Stelle im Speicher befinden?
-
Weniger Speicherverbrauch.
Unions braucht man heutzutage, besonders auf PC's, weniger.
Werden übrigens auch als reinterpret_cast2<> missbraucht, weil die Coder zu faul sind, keine Ahnung haben und/oder nicht standardkonform arbeiten.
-
Dummkopf schrieb:
Was macht es für einen Sinn, wenn die Daten einer uion sich alle an der gleichen Stelle im Speicher befinden?
Man spart sich einen reinterpret/static_cast bzw hat verschiedene Möglichkeiten des Zugriffs.
union { struct { float x; float y; }; struct { float u; float v; }; float vector[2]; };Hier könnte man auf die selben Variablen mit x,y oder u,v oder vector zugreifen, wie es einem gefällt.
-
Xebov schrieb:
Hier könnte man auf die selben Variablen mit x,y oder u,v oder vector zugreifen, wie es einem gefällt.
absolut furchtbare idee.
-
Xebov schrieb:
Dummkopf schrieb:
Was macht es für einen Sinn, wenn die Daten einer uion sich alle an der gleichen Stelle im Speicher befinden?
Man spart sich einen reinterpret/static_cast bzw hat verschiedene Möglichkeiten des Zugriffs.
union { struct { float x; float y; }; struct { float u; float v; }; float vector[2]; };Hier könnte man auf die selben Variablen mit x,y oder u,v oder vector zugreifen, wie es einem gefällt.
Na, da will aber einer unbedingt den Preis für das schlechteste Beispiel gewinnen...

-
Eigentlich ist das Verhalten ja undefiniert, wenn man ein anderes Feld von einem union liest als zuletzt geschrieben wurde.
unions sind dazu da, alternative Werte zu speichern ohne dafür mehrmals Speicherplatz zu belegen.
Type pruning mit unions ist auf der Skala der Schrecklichkeit noch eine Stufe höher anzusetzen als reinterpret_cast
-
unions sind in C++ sehr rar. Wenn sie vorkommen, dann eigentlich nur für Low-Level-Operationen. Eine typsichere Alternative bietet Boost.Variant; meist benötigt man aber keinen Multi-Typen.