2011-06-28 17 views
6

Cada vez que veo ejemplos de unión, siempre son tipos diferentes. Por ejemplo, a partir de MSDN:Unión del mismo tipo en C++

// declaring_a_union.cpp 
union DATATYPE // Declare union type 
{ 
    char ch; 
    int i; 
    long l; 
    float f; 
    double d; 
} var1;   // Optional declaration of union variable 

int main() 
{ 
} 

¿Qué pasa si tengo una unión (en este caso en el anonimato, pero eso no debería importar) así:

union 
{ 
    float m_1stVar; 
    float m_1stVarAlternateName; 
}; 

Independientemente de si se trata de una buena práctica o no, ¿esto causará algún problema?

+0

¿Qué problemas crees que esto podría causar? –

+0

Estoy recibiendo corrupción del montón, y la respuesta a esta pregunta dará lugar a otra pregunta :) ... Quiero eliminar todas las posibilidades. En este caso, no veo ningún problema, pero como dicen 'nunca se sabe'. – Samaursa

+0

Supongo que ya está usando algunas herramientas aparte de la mera inspección de código. En Unix-likes valgrind es increíblemente útil, no está seguro de las alternativas en Windows (http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows). Encontrar la corrupción del montón mediante la inspección del código puede consumir mucho tiempo. –

Respuesta

10

No, esto no causará ningún problema. La razón por la que no lo ve más a menudo es que no tiene sentido; ambos nombres se refieren al mismo valor del mismo tipo.

+7

Es cierto, pero a veces no puede saber si los tipos son los mismos (como si uno de ellos es un argumento de plantilla). – leftaroundabout

+1

@leftaroundabout, muy buen punto que no había considerado. Gracias. –

+2

Perdón por necro esto, pero ¿se puede hacer una copia de seguridad? ¿Está definido en alguna parte? Obviamente debería funcionar, pero ¿está garantizado? – Shaggi

Cuestiones relacionadas