Um union
é parecida com uma struct
, a diferença é que a Union reaproveita o espaço para o próximo tipo dado dentro dela, já a Struct adiciona à um novo bloco.
Declaração de uma Union:
Ela também é similar às classes, mas além da diferença de reaproveitamento, assim como as Structs, a Union não precisa de public
para acessar os dados, já nas classes se você não informar serão private
por padrão.
Vamos supôr que você possui esse código que armazena dados de um determinado produto:
Se você compilar o código acima, perceba que a saída será justamente o id
que atribuímos: 9
.
Mas agora vamos também atribuir dado para o value
e imprimir:
Saída:
Perceba que o value
a saída foi correta, mas o id
se transformou em um número estranho.
Note também que se você usar esse mesmo código com struct
isso não ocorrerá, exemplo:
Saída:
Por quê ???
Como havía dito o union
reaproveita o espaço, ou seja, o int
(4 bytes) é menor que o double
(8 bytes), logo, aquele espaço reaproveitado vira um Lixo de Memória .
Vamos ilustar somente por fins didáticos:
Em um union
o espaço do int
é reaproveitado e ele escreve o double
:
Já numa struct
ele mantém aquele espaço do int
e cria um novo para o double
Se você inverter as ordens de definição isso não ocorrerá porque o int
é menor que o double
.
Unions foram criados justamente para economizar espaço na memória, mas os programadores obtiveram um vício de escrita e usam mais comumente as Structs.
No então, em código de alguns programadores que se preocupam muito com otimização você encontrará mais Unions que Structs .
Quer aprender C++? Então, acesse: https://terminalroot.com.br/cpp .