每个结构只允许一个没有大小的数组?

Ann*_*inn 5 c++ arrays visual-studio-2010

我正在编写一个结构来描述我需要的常量值,并注意到一些奇怪的东西.

namespace res{
    namespace font{
        struct Structure{
            struct Glyph{
                int x, y, width, height, easement, advance;
            };
            int glyphCount;
            unsigned char asciiMap[];   // <-- always generates an error
            Glyph glyphData[];          // <-- never generates an error
        };
        const Structure system = {95, 
                              {
                                 // mapping data
                              }, 
                              {
                                 // glyph spacing data
                              }
        }; // system constructor
    } // namespace font
} // namespace res
Run Code Online (Sandbox Code Playgroud)

Structure非纯化数组的最后两个成员如果它们本身就不会停止编译器.但如果它们包含在结构的定义中,则会导致错误,说"类型不完整"

如果我给第一个数组一个大小,这将不再是一个问题.在这种情况下哪个不是问题,但我仍然好奇......

我的问题是,为什么我的struct中有一个unsized数组,但是有两个会导致问题?

Mik*_*our 5

在标准C++中,你完全不能这样做,尽管有些编译器支持它作为扩展.

在C中,每个成员都struct需要在其中拥有固定的位置struct.这意味着最后一个成员可以具有未知大小; 但是没有任何东西可以追随它,因此没有办法拥有不止一个未知大小的成员.

如果您确实利用编译器对C++中的这种黑客的非标准支持,那么请注意,如果任何成员struct都是非平凡的,那么事情可能会出现严重错误.通过分配一块原始内存并将其重新解释为此类型,只能在末尾使用非空数组"创建"对象; 如果你这样做,将不会调用构造函数或析构函数.