C++ C++;结构匿名联合中的成员初始化列表

C++ C++;结构匿名联合中的成员初始化列表,c++,struct,initialization,unions,C++,Struct,Initialization,Unions,我有以下课程: class LineSegW { public: union { struct { public: int sx; int sy; int ex; int ey; }; struct { public: Vec2i s; Vec2i e;

我有以下课程:

class LineSegW {
public:

    union {
        struct {
        public:
            int sx;
            int sy;
            int ex;
            int ey;
        };

        struct {
        public:
            Vec2i s;
            Vec2i e;
        };
    };

    int w;

    LineSegW(int _sx, int _sy, int _ex, int _ey, int _w) : 
        sx(_sx), sy(_sy), ex(_ex), ey(_ey), w(_w) {}
};
Vec2i仅由2个整数组成。现在的问题是,给定的构造函数没有初始化类成员,除了不在并集中的整数w。当我把构造函数写成

LineSegW(int _sx, int _sy, int _ex, int _ey, int _w) {
    sx = _sx;
    sy = _sy;
    ex = _ex;
    ey = _ey;
    w = _w;
}

一切正常。两个变量都不会产生警告或错误,所以第一个选项有什么错误?

没有有效的C++(联盟中的匿名结构)VS2012编译没有错误或警告。though@testman这并不意味着它符合标准。据我所知,匿名结构是标准不允许的。@Lehu是的,它显然不是标准的,但第二个示例也是非标准的,并且工作正常。为什么在不符合标准的情况下允许非标准。。。没有一个编译器是完美的。错误和不一致的行为不断被发现和纠正。没有有效的C++(联盟中的匿名结构)VS2012编译没有错误或警告。though@testman这并不意味着它符合标准。据我所知,匿名结构是标准不允许的。@Lehu是的,它显然不是标准的,但第二个示例也是非标准的,并且工作正常。为什么在不符合标准的情况下允许非标准。。。没有一个编译器是完美的。不断发现并纠正错误和不合规行为。