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数组,但是有两个会导致问题?
在标准C++中,你完全不能这样做,尽管有些编译器支持它作为扩展.
在C中,每个成员都struct需要在其中拥有固定的位置struct.这意味着最后一个成员可以具有未知大小; 但是没有任何东西可以追随它,因此没有办法拥有不止一个未知大小的成员.
如果您确实利用编译器对C++中的这种黑客的非标准支持,那么请注意,如果任何成员struct都是非平凡的,那么事情可能会出现严重错误.通过分配一块原始内存并将其重新解释为此类型,只能在末尾使用非空数组"创建"对象; 如果你这样做,将不会调用构造函数或析构函数.
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |