quiero usar una cuerda dentro de Union. si escribo como a continuación¿Por qué el compilador no permite std :: string dentro de la unión?
union U
{
int i;
float f;
string s;
};
compilador da error diciendo T :: S tiene constructor de copia.
He leído alguna otra publicación para encontrar formas alternativas de resolver este problema. Pero quiero saber por qué el compilador no permite esto en primer lugar?
EDITAR: @KennyTM: En cualquier unión, si el miembro se inicializa, otros tendrán valores basura, si ninguno se inicializa, todos tendrán valores basura. Creo que la unión etiquetada solo proporciona cierta comodidad para acceder a los valores válidos de Union. Su pregunta: ¿cómo usted o el compilador escriben un constructor de copia para la unión anterior sin información adicional? sizeof (cadena) da 4 bytes. En base a esto, el compilador puede comparar el tamaño de otros miembros y asignar la asignación más grande (4 bytes en nuestro ejemplo). La longitud interna de la cuerda no importa porque se almacenará en una ubicación separada. Deje que la cuerda sea de cualquier longitud. Todo lo que la Unión tiene que saber es invocar el constructor de copia de clase de cadena con el parámetro de cadena. En cualquier forma en que el compilador encuentre que se debe invocar el constructor de copia en el caso normal, se seguirá un método similar incluso cuando la cadena esté dentro de Unión. Así que estoy pensando que el compilador podría hacer, asignar 4 bytes. Entonces, si se asigna una cadena a s, la clase de cadena se encargará de la asignación y copia de esa cadena utilizando su propio asignador. Entonces tampoco hay posibilidad de corrupción en la memoria.
¿La cadena no existe en el momento del desarrollo de la Unión en el compilador? Así que la respuesta aún no está clara para mí. Soy un nuevo amigo en este sitio, si hay algo mal, por favor discúlpeme.
No use 'union' ya que es nuevo en C++,' union' es jugar con la memoria y eso es un dominio reservado a los expertos.Necesitas aprender acerca de C++ orientado a objetos para entender por qué sucede esto y te faltan demasiados conceptos en el momento para entender cualquiera de las respuestas dadas (en verdad pueden parecerle crípticas). Existen excelentes recursos disponibles, y varios temas en este sitio los enumeran. –
soy nuevo en este sitio, no en C++. De todos modos ... Gracias a todos por sus esfuerzos y aportes. – bjskishore123