Я видел некоторый код следующим образом:Использование объединения внутри класса
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;
};
Насколько я знаю, это анонимный союз, даже не определяющий переменную. Как мы можем получить доступ к переменным-членам внутри этого объединения?
«Потому что это в значительной степени то, что делает анонимный союз» - что хорошего. Если я дам переменную в конце определения объединения, то код будет недействительным больше - спасибо – q0987