Qualcuno può per favore parlare delle differenze tra un'unione (o una struttura) normale e anonima? Ne ho appena trovato uno:
le funzioni non possono essere definite in unione anonima.Unione anonima e unione normale
risposta
Non è necessario l'operatore punto "." per accedere ad elementi sindacali anonimi.
#include <iostream>
using namespace std;
int main() {
union {
int d;
char *f;
};
d = 4;
cout << d << endl;
f = "inside of union";
cout << f << endl;
}
Questo compilerà correttamente in questo caso ma "NO" per Unione normale.
Inoltre, l'unione anonima può avere solo membri pubblici.
PS: La semplice omissione della parte del nome della classe della sintassi non rende un'unione un'unione anonima. Affinché un sindacato si qualifichi come unione anonima , la dichiarazione non deve dichiarare un oggetto.
Buona risposta, +1! Non avevo idea che esistessero unioni anonime :) Nel caso qualcuno volesse ulteriori letture (l'ho fatto una volta che ho letto la risposta di cui sopra!) Guarda la sezione 9.4, i punti elenco 5 e 6 per alcune delle sottigliezze delle specifiche C++ in INCITS/ISO/IEC 14882-2011 [2012]. – Jimbo
Per quanto ne so, le strutture anonime non esistono nel C++ standard, sebbene possano essere supportate da alcuni compilatori.
Le unioni anonime non possono avere membri protetti o privati. Si accede ai membri senza usare il nome del sindacato (chiaramente, poiché non ne ha uno!). Le unioni anonime globali (Dio non voglia) devono essere dichiarate statiche.
[struct/union senza nome in C] (http://stackoverflow.com/questions/13376494/unnamed-struct-union-in-c), [Struttura anonima/unione in C] (http: // gcc.gnu.org/ml/gcc-patches/1999-06n/msg00376.html) –