2012-08-10 9 views
31

Se creo un oggetto unione const (ad esempio nel codice seguente), in questo caso non è possibile eseguire alcuna assegnazione membro. Quindi, c'è un uso di creare un oggetto union const, in ogni caso?Qual è l'uso di un oggetto unione costante?

union un 
{ 
    int i; 
    float f; 
    char c; 
}; 
const union un a; 
/// ! a.i = 10; error. 
+1

In 'c' non è raro interpretare un'unione attraverso un membro diverso rispetto a quello che è stato impostato di recente. E, naturalmente, potrebbe essere 'const volatile' - cioè non lo cambieremo, ma qualcun altro potrebbe, e dobbiamo essere in grado di vederlo. – BoBTFish

+4

Non se l'intera dannata unione è 'const'. – Puppy

+0

@Xeo, non verrebbe compilato senza la parte "union" quando ho provato con gcc. –

risposta

33

È ancora possibile inizializzare il sindacato come segue:

const union un a = { .i = 100 }; 

quindi utilizzare nel codice.

+3

In C, che è. In C++, penso che potresti scrivere un costruttore e cose del genere. – Xeo

+0

Haha, mi hai battuto per 35 secondi. :-) –

+0

Questo è quello che non sapevo. In questo modo ogni membro del sindacato può essere inizializzato! – cirronimbo

15

È ancora possibile assegnarlo a dichiarazione, per esempio come questo:

const union un a = {0}; 

Aggiornamento: che la notazione imposta il prima dei membri del sindacato.

+2

Quale membro fa questo set? –

+0

@ R.MartinhoFernandes, tutti i membri, a zero. –

+0

Sì, ma può essere fatto solo per assegnare il primo membro (o per azzerare tutti, come hai detto)! – cirronimbo

Problemi correlati