2012-08-10 12 views
31

Si hago un objeto de unión const (por ejemplo, en el código a continuación), no se puede hacer ninguna asignación de miembro en eso. Entonces, ¿hay algún uso de hacer un objeto de unión const, en cualquier caso?¿Cuál es el uso de un objeto de unión constante?

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

En 'c' no es raro interpretar una unión a través de un miembro diferente a la que se estableció recientemente. Y, por supuesto, podría ser 'const volátil ', es decir, no lo cambiaremos, pero alguien más podría hacerlo, y debemos ser capaces de verlo. – BoBTFish

+4

No si todo el maldito sindicato es 'const'. – Puppy

+0

@ Xeo, no compilaría sin la parte "unión" cuando probé con gcc. –

Respuesta

33

todavía Puede inicializar la unión de la siguiente manera:

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

y utilizarla en su código.

+3

En C, eso es. En C++, creo que podrías escribir un constructor y esas cosas. – Xeo

+0

Jaja, me ganaste por 35 segundos. :-) –

+0

Esto es lo que no sabía. ¡De esta forma, cualquier miembro de la unión puede ser inicializado! – cirronimbo

15

Todavía se puede asignar a la declaración, por ejemplo a esto:

const union un a = {0}; 

Actualización: notación que establece el primer de los miembros del sindicato.

+2

¿Qué miembro hace esto establecer? –

+0

@ R.MartinhoFernandes, todos los miembros, a cero. –

+0

Sí, pero eso solo se puede hacer para asignar el primer miembro solamente (o para poner todo a cero, como mencionaste). – cirronimbo

Cuestiones relacionadas