Ich würde gerne den Unterschied zwischen Struktur und Vereinigung für einen Mitgliedsdatentyp wissen, falls es einen gibt.
Gibt es einen Unterschied zwischen Struktur und Vereinigung, wenn wir nur ein Mitglied haben?
RAFI KC
Kerrek SB
In C: Keine. Der berühmte „Platzspar-Witz“ #define struct union
ist fast kein Scherz.
In C++98: Unions können nur POD-Mitglieder haben, Nicht-Union-Klassen können beliebige Mitglieder haben.
In C++11: Unions können beliebige Datenmember des Objekttyps (aber nicht des Referenztyps) haben, aber ihre Verwendung ist eingeschränkter als die von Non-Union-Klassen. (Nämlich: Eine Union kann keine virtuellen Elementfunktionen haben, kann keine Basisklasse sein und kann keine Basisklassen haben.) Außerdem müssen Sie mehr Code schreiben, damit eine Union mit einem Mitglied funktioniert, im Gegensatz zu einer Nicht-Union-Klasse mit einem Mitglied , da Sie Konstruktoren und den Destruktor selbst schreiben müssen.
-
Darf eine Implementierung keine Auffüllung in einer Struktur haben, aber nicht in einer Union?
– Mafso
26. Oktober 2014 um 12:03 Uhr
-
@mafso: Ich glaube nicht. Die einzige Einschränkung, die ich sehe, ist diese: “Die Größe einer Union reicht aus, um die größten ihrer nicht statischen Datenelemente aufzunehmen.”
– Kerrek SB
26. Oktober 2014 um 12:11 Uhr
-
Keine Polsterung erlaubt Vor das erste Mitglied einer Struktur, und am Ende kann sowohl für die Vereinigung als auch für die Struktur eine Auffüllung vorhanden sein. Es gibt also keinen Unterschied zwischen Single Member Union und struct.
– PP
26. Oktober 2014 um 12:14 Uhr
-
Vielleicht einen kurzen einzeiligen Hinweis auf Lesbarkeit und Wartbarkeit wert (dh bricht nicht ab, wenn Sie Mitglied Nr. 2 hinzufügen).
– Djechlin
26. Oktober 2014 um 15:22 Uhr
Sie können das selbst durch eine einfache Suche bei Google nachlesen.
– Benutzer3522371
26. Oktober 2014 um 11:27 Uhr
@Begueradj: Vielleicht, aber der Punkt ist etwas subtil, und ich bin vielleicht nicht geneigt, dem ersten zu vertrauen, was Google mir entgegenwirft.
– Kerrek SB
26. Oktober 2014 um 11:34 Uhr
Zu POD und Aggregaten mit zusätzlicher Diskussion der Änderungen für C++11 siehe Was sind Aggregate und PODs und was sind ihre Besonderheiten
– Richard Kammern
26. Oktober 2014 um 12:45 Uhr
Anstatt zu schließen, vielleicht zu Programmierern wechseln?
– Wbeere
26. Oktober 2014 um 19:50 Uhr