2013-06-15 7 views
5

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

+3

[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) –

risposta

7

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.

+2

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

0

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.