来自 C++11 标准的§9.5/9(强调我的):
A union-like class is a union or a class that has an anonymous union as a direct member. A union-like class
X
has a set of variant members. IfX
is aunion
, a non-static data member ofX
that is not an anonymous union is a variant member ofX
.
粗体部分是不是说类 union 类之间是类还是 union ,只有是 union 才能有非匿名 union 的非静态变体成员?如果是这样,为什么?它对代码有什么实际影响?
我实际上在质疑这个陈述是否意味着“如果 X
是一个类 union 类 ...”。那对我来说就完全有意义了。
不管怎样,这个条款在过去几天一直困扰着我,我希望完全理解它的意思。
最佳答案
不,您尝试的澄清是错误的。这是一个类似 union 的类 X:
struct X
{
int a;
union {
double b;
long c;
};
};
X::a
是类 union 类 X
的非静态数据成员,它不是匿名 union 。但它绝对不是变体成员。
union 体的所有非静态数据成员都是变体成员。对于不是 union 的类 union 类,只有那些嵌套在 union 子对象中的类才是变体成员。
关于c++ - §9.5/8 中可能含糊不清的陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778072/