C++ 初始化C++;结构

C++ 初始化C++;结构,c++,winapi,struct,initialization,C++,Winapi,Struct,Initialization,我不明白那部分: struct CUSTIOMSTRUCT { FLOAT x, y, z; DWORD color; }; CUSTOMSTRUCT MyVertex = {320.0f, 50.0f, 1.0f, 0xFF00FFCC}; 我必须把它们整理好吗 对不起,我是C#guy。是的,你必须把它们整理好。C99版本的C语言提供了“标记”的聚合初始化器,允许一个“放”它们无序,但它不是在C++中(还?)。 < P>是的,它们必须按声明的顺序,所以{x,y,z,色}。

我不明白那部分:

struct CUSTIOMSTRUCT
{
    FLOAT x, y, z;
    DWORD color;
};

CUSTOMSTRUCT MyVertex = {320.0f, 50.0f, 1.0f, 0xFF00FFCC};
我必须把它们整理好吗


对不起,我是C#guy。

是的,你必须把它们整理好。C99版本的C语言提供了“标记”的聚合初始化器,允许一个“放”它们无序,但它不是在C++中(还?)。

< P>是的,它们必须按声明的顺序,所以{x,y,z,色}。

更精确,

{}运算符返回几个内存字节, 所以当你使用

{320f、50f、1f、0xFF00FFCC} 它返回一个16字节的内存,然后通过“memcpy”命令将该内存复制到struct变量

因此,如果你把这些放在顺序上,程序可以很好地编译,但不能很好地工作


更好的选择是使用构造函数。

-1,这是误导。C++语言中没有操作符{},上下文中的语法是初始化子句。即使假设您是用其他名称引用它,您描述的行为也不同于初始值设定项子句所做的。例如,如果initializer子句只是
{320f}
,它仍然会将结构的其余部分初始化为0,这相当于
{320f,0f,0f,0}
,即大括号初始值设定项的效果取决于被初始化的对象和大括号本身的内容。在这个过程中没有调用任何
memcpy
。大卫,你完全错了。首先,运算符不一定是编译时运算符(您应该已经知道),其次,您提供的示例完全证明了我的理论!您可以在数据不足的情况下使用memcpy。第三,没有调用MeMCPY,因为这是编译时操作,但是对于C语言的人来说,这是最好的解释。如果我们有构造函数,它是否可能在C++中?这也不在即将到来的C++标准中。
{320.0f, 50.0f, 1.0f, 0xFF00FFCC};