联合声明的两种不同语法如何给我不同的大小?

Kau*_*wal 3 c++ struct sizeof unions

我在结构中声明了联合数据类型(但有两种不同的语法)。对于结构的大小,我得到不同的输出。这里有什么收获?

union u {
    double x;
    int y;
};

union {
    double x;
    int y;
} u_1;

struct s1 {
    int a;
    union {
        int b;
        double c;
    };
};  

struct s2 {
    int a;
    union u{
        int b;
        double c;
    };
};

int main()
{
    u u1;
    s1 s_1;
    s2 s_2;

    cout<< sizeof(u1)<< " "<<sizeof(u_1)<<" " <<sizeof(s_1)<<" " <<sizeof(s_2);
}
Run Code Online (Sandbox Code Playgroud)

我期望输出:8 8 16 16但实际输出是8 8 16 4。

use*_*208 7

s2声明工会,但不成为工会的成员。
s1正在使用“匿名联合”语义:(来自https://en.cppreference.com/w/cpp/language/union)

匿名联合的成员被注入到封闭范围内(并且不得与在此声明的其他名称冲突)。