我目前正在使用遗留的C++代码,使用gcc 2.9.X成功编译.
我被要求将此遗留代码移植到gcc 3.4.X. 大多数错误很容易纠正,但这个特殊的错误让我很困惑.
上下文 :
 struct TMessage 
   {
    THeader header;
    TData data;
   };
 struct THeader
   {
    TEnum myEnum;
    TBool validity;
   };
做了什么 :
 const TMessage init = {{0}};
 /* Later in the code ... */
 TMessage message = init;
我的问题:
{{}}运算符的含义是什么?它是否将第一个字段(标题)初始化为二进制0?它是否将第一个结构(枚举)的第一个字段初始化为(字面值)0?
我得到的3.4.6错误是invalid conversion from 'int' to 'TEnum',有一对或两对大括号.  
如何在不使用memset的情况下将我的结构设置为一堆0?
提前致谢.
Jam*_*mes 20
它将POD结构的所有字段初始化为0.
理由:
const SomeStruct init = {Value};
将SomeStruct的第一个字段初始化为Value,将结构的其余部分初始化为零(我忘记了标准中的部分,但它在某处)
从而:
const SomeOtherStruct init = {{Value}};
将结构的第一个字段的第一个字段(其中结构的第一个字段本身是POD结构)初始化为Value,将第一个字段的其余部分初始化为零,将结构的其余部分初始化为0.
另外,这只是不起作用,因为c ++禁止隐式转换int为枚举类型,所以你可以这样做:
const SomeOtherStruct init = {{TEnum(0)}};