Vat*_*san 6 c++ anonymous-types unions c++11
9.5.6在命名空间或全局命名空间中声明的匿名联合应声明为静态.
为什么?
最新情况:
基于Bart van Ingen Schenau和Lothar的回应,到目前为止最好的解释可能是:
如果在两个翻译单元中遇到相同的全局匿名联合(例如,通过头文件),那么如何满足一个定义规则?这两个定义是否被视为相同并合并在一起?或者这两个定义是否被视为不同?如果它们被视为相同,那么编译器可能正在做"魔术",否则对其他实体不起作用.如果它们被视为相同,那么编译器在没有程序员的明确同意的情况下这样做......所以我想通过要求将其声明为静态来强制明确同意.
假设匿名联合不需要被声明为静态,并且编译器遇到这两个翻译单元(在预处理之后):
文件1:
union {
int a;
char b;
};
// Further contents referring to a and b
Run Code Online (Sandbox Code Playgroud)
文件2:
union {
int a;
char b;
};
// Further (different) contents referring to a and b
Run Code Online (Sandbox Code Playgroud)
这两个联合是同一个对象,还是应该是不同的对象?
我认为,为了避免像这样无法回答的问题,已经决定必须将命名空间范围的匿名联合声明为静态。