¿Por qué sizeof (std :: variant) tiene el mismo tamaño que una estructura con los mismos miembros?
La plantilla de clasestd::variant
representa una unión de tipo seguro. Una instancia destd::variant
en cualquier momento tiene un valor de uno de sus tipos alternativos o no tiene ningún valor.
sizeof(std::variant<float, int32_t, double>) == 16
Pero si es una unión, ¿por qué ocupa tanto espacio?
struct T1 {
float a;
int32_t b;
double c;
};
struct T2 {
union {
float a;
int32_t b;
double c;
};
};
La variante tiene el mismo tamaño que la estructura.
sizeof(T1) == 16
sizeof(T2) == 8
Esperaría el tamaño de la unión, más 4 bytes para almacenar, qué tipo está activo.