Я читал об союзах на днях (сегодня) и пробовал примеры функций, которые пришли с ними. Достаточно просто, но результат был понятен и полная фигня.
Первый пример:
union Test
{
int Int;
struct
{
char byte1;
char byte2;
char byte3;
char byte4;
} Bytes;
};
, где предполагается, что int имеет 32 бита. После того, как я установил значение Test t; t.Int = 7;
и затем cout
cout << t.Bytes.byte1 << etc...
отдельные байты, ничего не отображается, но мой компьютер подает звуковой сигнал. Что довольно странно, я думаю.
Второй пример дал мне еще худшие результаты.
union SwitchEndian
{
unsigned short word;
struct
{
unsigned char hi;
unsigned char lo;
} data;
} Switcher;
На мой взгляд, выглядит немного странно. Во всяком случае, из описания, которое он говорит, это должно автоматически сохранять результат в формате с высоким / меньшим порядком байтов, когда я устанавливаю значение как
Switcher.word = 7656;
и звонит с cout << Switcher.data.hi << endl
Результатом этого были символы, даже не определенные в диаграмме ASCII. Не уверен, почему они появляются.
Наконец, у меня возникла ошибка, когда я попытался исправить пример, вместо того, чтобы поместить байты в конец структуры, расположив ее прямо рядом с ней. Так что вместо
struct {} Bytes;
Я хотел написать
struct Bytes {};
Это бросило мне большую ошибку. Какая разница между ними? Поскольку в C ++ не может быть безымянных структур, в то время казалось вполне очевидным, что байты, расположенные в начале и в конце, являются его именами. За исключением нет, это не весь ответ, я думаю. Что тогда?