前几天(今天)我读到了关于工会的文章,并尝试了它们附带的示例函数。很容易,但结果是清晰而彻底的垃圾。
第一个例子是:
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 图表中定义的符号。不知道为什么会出现这些。
最后,当我尝试纠正示例时出现错误,而不是将 Bytes 放在结构的末尾,而是将其放在它旁边。所以而不是
struct {} Bytes;
我想写
struct Bytes {};
这给了我一个很大的错误。这些有什么区别?由于 C++ 不能有未命名的结构,在当时,很明显,位于开头和结尾的字节就是命名它的东西。除了不,这不是我猜的全部答案。之后怎么样了?