Was ist Variantenmitglied in C ++?

9

Ich bin neu in C ++. Ich lese sehr häufig von manchen Seiten dieses Variantenmitglieds ?.

%Vor%

Ich kenne Datenmitglied. aber was ist Variante Mitglied?

HINWEIS: Aus der C ++ - Spezifikation: Auf der Seite Konstruktor.

%Vor%     
Whoami 17.07.2012, 15:36
quelle

3 Antworten

12

"Variant member" ist in 9.5 / 8 von C ++ 11 definiert:

  

Eine Union-ähnliche Klasse ist eine Union oder eine Klasse mit einer anonymen Union   als direktes Mitglied. Eine Union-ähnliche Klasse X hat eine Reihe von Variantenmembern.   Wenn X eine Union ist, sind die Variantenmitglieder die nicht statischen Datenmitglieder;   Andernfalls sind seine Variantenmitglieder die nicht statischen Datenmitglieder von allen   anonyme Gewerkschaften, die Mitglieder von X sind.

Mit anderen Worten, alle nicht statischen Datenelemente einer Union sind "variant members", und für eine Klasse mit anonymen Vereinigungen sind ihre nicht statischen Datenelemente "variant members" der Klasse.

>

Der von Ihnen zitierte Kontext lautet 12.1 / 5. Wenn eine Union-ähnliche Klasse ein variantes Member mit einem nicht-trivialen Standardkonstruktor hat, wird der Standardkonstruktor der Klasse selbst gelöscht. Das Problem ist , welches variant member vom Standardkonstruktor der Klasse erstellt werden soll, und die Lösung soll keinen Standardkonstruktor haben. Wenn alle Variantenmitglieder triviale Standardkonstruktoren haben, gibt es kein Problem, da der Standardkonstruktor der Klasse, indem er nichts tut, alle / keine von ihnen gleich konstruiert.

boost::variant ist eine separate Sache. Ich würde nicht zu überrascht sein, wenn "manche Seiten" "abweichende Mitglieder" sagen, wenn sie "die möglichen Typen, die ein gegebenes boost::variant enthalten kann", das heißt die "Mitglieder" dieses variant , bedeuten. Aber das ist nicht die Bedeutung, die im C ++ 11-Standard neu definiert wird.

    
Steve Jessop 17.07.2012, 15:51
quelle
7

Der Begriff variant wird normalerweise verwendet, um ein Element zu identifizieren, das einen Wert einer Menge verschiedener Typen enthalten kann. Ähnlich wie in union in der Sprache ist der Begriff variant normalerweise für Typen reserviert, die das sichere Speichern der verschiedenen Optionen ermöglichen.

Vielleicht möchten Sie die Dokumentation der Boost-Variantenbibliothek für ein solches Beispiel lesen, und wenn das das Konzept nicht auflöst, lassen Sie einen Kommentar fallen / erstellen Sie eine Frage mit Ihren Zweifeln.

Boost-Variante

    
quelle
2

Eine Variante ist eine Struktur, die ein Union-Member und ein unsigned Integer-Member enthält, das beschreibt, welches Mitglied der Union gerade verwendet wird. Wenn Sie nicht wissen, was eine Union ist, lesen Sie zuerst darüber und dann kommen Sie zurück.

    
Vinit 17.07.2012 15:44
quelle

Tags und Links