зачем гадать, если можно заглянуть в шапку. я многому научился (плохо), читая заголовки стандартной библиотеки. Это зависит от реализации, конечно

н классаstd::variant представляет типобезопасный союз. Экземплярstd::variant в любой момент времени либо содержит значение одного из его альтернативных типов, либо он не имеет значения.

sizeof(std::variant<float, int32_t, double>) == 16

Но если это союз, почему он занимает так много места?

struct T1 {
    float a;
    int32_t b;
    double c;
};

struct T2 {
    union {
        float a;
        int32_t b;
        double c;
    };
};

Вариант имеет тот же размер, что и структура

sizeof(T1) == 16
sizeof(T2) == 8

Я ожидаю, что размер объединения плюс 4 байта для хранения, какой тип активен.

Ответы на вопрос(0)

Ваш ответ на вопрос