我正在处理来自遗留接口的匿名结构。在运行时,字段从外部源填充,例如:
struct foo {
union {
struct {
int a;
};
struct {
int b;
int c;
int d;
};
};
};这个联合的想法是,根据外部因素,遗留接口使foo的行为就好像它只包含结构1或2。在C++中,匿名联合是合法的,而匿名结构是不合法的。据我所知,匿名结构真正要做的就是让它的成员对外部作用域可见。
匿名结构对程序有没有什么“可见的效果”,或者只是用来对相关字段进行分组?也就是说,我可以让它成为union { int a; int b; int c; int d; }而不与前面的代码有明显的区别吗?
发布于 2017-05-11 15:03:13
这两个例子是完全不同的。
union { int a; int b; int c; int d; }有4个成员,一次只能有一个成员处于活动状态。所有4个元素都有相同的大小。
union {
struct { int a; };
struct { int b,c,d };
};有2个成员,并且它们的大小不相同。
https://stackoverflow.com/questions/43908550
复制相似问题