§9.5/ 8中可能含糊不清的陈述

0x4*_*2D2 5 c++ language-lawyer c++11

§9.5/ 9来自C++ 11标准(强调我的):

工会状类是联合或具有匿名联合作为直接成员的类.类似联合的类X具有一组变体成员.如果X是a union,则非静态数据成员X不是匿名联合,是其变体成员X.

是粗体的部分是说在类似联合的类之间是一个类还是一个联合,只有它是一个联合才能有一个不是匿名联合的非静态变体成员?如果是这样,为什么?它在代码中有什么实际区别?

我实际上质疑这句话是否意味着说"如果X是一个类似工会的阶级 ......".那对我来说完全合情合理.

无论哪种方式,这个条款在过去几天一直困扰着我,我希望完全理解它所说的内容.

Ben*_*igt 5

不,你的澄清是错误的.这是一个类似联盟的类X:

struct X
{
    int a;
    union {
        double b;
        long c;
    };
};
Run Code Online (Sandbox Code Playgroud)

X::a是类似联合的类的非静态数据成员X,它不是匿名联合.但它绝对不是变种成员.

联合的所有非静态数据成员都是变体成员.对于不是联合的类似联合的类,只有那些嵌套在union子对象中的类是变体成员.