[C++]
[StructLayout(LayoutKind::Explicit, Size=16, CharSet=CharSet::Ansi)]
__value class MySystemTime {
public:
[FieldOffset(0)] short int wYear;
[FieldOffset(2)] short int wMonth;
[FieldOffset(4)] short int wDayOfWeek;
[FieldOffset(6)] short int wDay;
[FieldOffset(8)] short int wHour;
[FieldOffset(10)] short int wMinute;
[FieldOffset(12)] short int wSecond;
[FieldOffset(14)] short int wMilliseconds;
};
我是想象这个,还是方括号中的元素与C ++语法不一致?
为什么在C ++提供足够的工具来指定语言的标准定义中的结构布局时(以及通常支持的#pragma pack()),可以解决所有这些问题。设计为语言的兼容性是否保证您可以在C ++中定义可以在C中定义的任何结构?我理解需要能够在其他语言中明确描述C结构的布局,但似乎没有必要使用C ++提供
extern "C" { }
答案 0 :(得分:1)
方括号中的东西称为属性,通常出现在C#代码中。它们在这里看起来具有相同的含义,因为这不是严格的C ++。它具有Microsoft扩展以允许与CLI集成。
在C或C ++中声明这样的结构时,这并不能保证特定的内存布局。要控制它,您需要特殊的编译指示来控制“打包”。这些是特定于平台的。所以你在这里看到的只是CLR的等价物。
更新:该示例来自Microsoft的用于C ++的CLI集成的旧版本的文档,称为托管C ++。它很快被放弃了,并在下一个版本中由C++/CLI替换 - 将C ++的CLI功能嫁接到C ++中是如此完整和广泛,它实际上变成了一种不同的语言,就像C ++是一种与C语言不同的语言一样。