我看到一些代码如下:
class A
{
private:
union {
B *rep;
A *next;
}; // no variables of this anonymous defined!
void func()
{
A *p = new A;
p->next = NULL; // why p has a member variable of 'next'?
}
};
我已经用VS2010编译了上面的代码,没有任何错误。 问题来了,
为什么 p 有成员变量 'next'?
union {
B *rep;
A *next;
};
据我所知,这是一个匿名 union ,甚至没有定义变量。我们怎样才能像那样访问这个 union 内部的成员变量?
最佳答案
因为这几乎就是匿名 union 所做的,它在封闭的命名空间中定义了零个或多个变量(在类声明中使它们成为字段名称),这些变量占用重叠的内存。因此在使用中它就像你声明的一样
class A
{
private:
B *rep;
A *next;
void func()
{
A *p = new A;
p->next = NULL;
}
};
...除了 rep 和 next 占用重叠空间(或者假设两个指针将具有相同的大小,相同的空间),因此命名 union 带来的所有危险和好处。
关于c++ - 在类中使用 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453170/