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