0x4*_*2D2 5 c++ language-lawyer c++11
§9.5/ 9来自C++ 11标准(强调我的):
甲工会状类是联合或具有匿名联合作为直接成员的类.类似联合的类
X具有一组变体成员.如果X是aunion,则非静态数据成员X不是匿名联合,是其变体成员X.
是粗体的部分是说在类似联合的类之间是一个类还是一个联合,只有它是一个联合才能有一个不是匿名联合的非静态变体成员?如果是这样,为什么?它在代码中有什么实际区别?
我实际上质疑这句话是否意味着说"如果X是一个类似工会的阶级 ......".那对我来说完全合情合理.
无论哪种方式,这个条款在过去几天一直困扰着我,我希望完全理解它所说的内容.
不,你的澄清是错误的.这是一个类似联盟的类X:
struct X
{
int a;
union {
double b;
long c;
};
};
Run Code Online (Sandbox Code Playgroud)
X::a是类似联合的类的非静态数据成员X,它不是匿名联合.但它绝对不是变种成员.
联合的所有非静态数据成员都是变体成员.对于不是联合的类似联合的类,只有那些嵌套在union子对象中的类是变体成员.