инициализация объединения

Я пытаюсь глобально инициализировать объединение, как в следующем примере:

#include <cstdio>

typedef union {
    char t[4];
    int i;
} a;

enum {
    w = 5000,
    x,
    y,
    z
};

a temp = {w};
int main() {
    printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
    return 0;
}

Однако, если вы запустите код, вы заметите, что ни temp.i, ни temp.t [. ..] фактически дает правильный элемент, с которым я инициализировал объединение. Я предполагаю, что этого можно было бы избежать, если бы я мог вручную инициализировать целочисленный член, но, к сожалению, я не могу. Я также не могу изменить порядок элементов в структуре (замена порядка int и char инициализирует все правильно) - они фактически предоставляются внешней библиотекой. У меня такой вопрос: как я могу установить целочисленный член структуры глобально , а не член char [4] (или, в данном случае, только первый элемент char [])?

РЕДАКТИРОВАТЬ: Есть ли решение этой проблемы строго на C ++? то есть тот, в котором инициализация именованной структуры не работает (потому что она не существует в языке)?

7
задан timrau 15 August 2012 в 17:12
поделиться