我目前正在处理遗产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;
我的问题 :
{{}} 运算符的含义是什么?它是否初始化第一个字段(header) 到二进制 0 ?它是否初始化第一个结构的第一个字段(enum) 到(字面量)0 ?
我得到的 3.4.6 错误是invalid conversion from 'int' to 'TEnum'
,带有一对或两对大括号。
如何在不使用 memset 的情况下将结构设置为一堆 0?
提前致谢。
它将 POD 结构的所有字段初始化为 0。
理由:
const SomeStruct init = {Value};
将 SomeStruct 的第一个字段初始化为 Value,将结构的其余部分初始化为零(我忘记了标准中的部分,但它在某处)
Thus:
const SomeOtherStruct init = {{Value}};
将结构体第一个字段的第一个字段(其中结构体的第一个字段本身就是 POD 结构体)初始化为 Value,将第一个字段的其余部分初始化为零,将结构体的其余部分初始化为 0。
此外,这只是不起作用,因为 c++ 禁止隐式转换int
枚举类型,所以你可以这样做:
const SomeOtherStruct init = {{TEnum(0)}};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)