Por que sizeof (std :: variant) tem o mesmo tamanho de uma estrutura com os mesmos membros?
O modelo de classestd::variant
representa uma união de tipo seguro. Uma instância destd::variant
a qualquer momento, mantém um valor de um de seus tipos alternativos ou não possui valor.
sizeof(std::variant<float, int32_t, double>) == 16
Mas se é uma união, por que ocupa tanto espaço?
struct T1 {
float a;
int32_t b;
double c;
};
struct T2 {
union {
float a;
int32_t b;
double c;
};
};
A variante tem o mesmo tamanho que a estrutura
sizeof(T1) == 16
sizeof(T2) == 8
Eu esperaria o tamanho da união, mais 4 bytes para armazenar, qual tipo está ativo.