Haben Gewerkschaften eine Kontrollstruktur, um zu prüfen, welches Element gerade verwendet wird (oder falls überhaupt)? Ich frage das, weil undefiniertes Verhalten in Ihrem Programm nie gut ist.Union für aktuelles verwendetes Element getestet
8
A
Antwort
12
Nein, ein solcher Mechanismus existiert nicht von der Stange. Sie müssen sich selbst darum kümmern. Die übliche Vorgehensweise ist das Einwickeln der union
in einem struct
:
struct MyUnion
{
int whichMember;
union {
//whatever
} actualUnion;
};
So haben Sie MyUnion x;
und x.whichMember
sagen Sie, welches Feld x.actualUnion
in Gebrauch ist (Sie können die Funktionalität implementieren obwohl).
+1: Diese Art von Struktur wird oft entweder eine "diskriminierte Union" oder eine "markierte Union" genannt. –
Ja, ich dachte über einen ähnlichen Ansatz nach, aber weil ich Sprachkonstrukte den selbstgebauten vorziehe, musste ich nur wissen, ob es einen gab. Danke für die schnelle Antwort. –