<i id='V7SIf'><tr id='V7SIf'><dt id='V7SIf'><q id='V7SIf'><span id='V7SIf'><b id='V7SIf'><form id='V7SIf'><ins id='V7SIf'></ins><ul id='V7SIf'></ul><sub id='V7SIf'></sub></form><legend id='V7SIf'></legend><bdo id='V7SIf'><pre id='V7SIf'><center id='V7SIf'></center></pre></bdo></b><th id='V7SIf'></th></span></q></dt></tr></i><div id='V7SIf'><tfoot id='V7SIf'></tfoot><dl id='V7SIf'><fieldset id='V7SIf'></fieldset></dl></div>

  • <tfoot id='V7SIf'></tfoot>

    <legend id='V7SIf'><style id='V7SIf'><dir id='V7SIf'><q id='V7SIf'></q></dir></style></legend>
      <bdo id='V7SIf'></bdo><ul id='V7SIf'></ul>

      <small id='V7SIf'></small><noframes id='V7SIf'>

        双花括号初始化 C 结构的含义是什么?

        时间:2023-07-01
            <bdo id='Wwl37'></bdo><ul id='Wwl37'></ul>
            <tfoot id='Wwl37'></tfoot>
              <tbody id='Wwl37'></tbody>

              • <legend id='Wwl37'><style id='Wwl37'><dir id='Wwl37'><q id='Wwl37'></q></dir></style></legend>
                • <small id='Wwl37'></small><noframes id='Wwl37'>

                  <i id='Wwl37'><tr id='Wwl37'><dt id='Wwl37'><q id='Wwl37'><span id='Wwl37'><b id='Wwl37'><form id='Wwl37'><ins id='Wwl37'></ins><ul id='Wwl37'></ul><sub id='Wwl37'></sub></form><legend id='Wwl37'></legend><bdo id='Wwl37'><pre id='Wwl37'><center id='Wwl37'></center></pre></bdo></b><th id='Wwl37'></th></span></q></dt></tr></i><div id='Wwl37'><tfoot id='Wwl37'></tfoot><dl id='Wwl37'><fieldset id='Wwl37'></fieldset></dl></div>

                  本文介绍了双花括号初始化 C 结构的含义是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我目前正在使用遗留的 C++ 代码,已成功通过 gcc 2.9.X 编译.
                  我被要求将此遗留代码移植到 gcc 3.4.X.大多数错误很容易纠正,但这个特别的错误让我感到困惑.

                  I'm currently working with legacy C++ code, successfully compiled with gcc 2.9.X.
                  I've been asked to port this legacy code to gcc 3.4.X. Most of the errors were easily corrected, but this particular one puzzles me.

                  上下文:

                   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?

                  My question(s) :
                  What is the meaning of the {{}} operator ? Does it initialize the first field (the header) to a binary 0 ? Does it initialize the first field of the first structure (the enum) to (literal) 0 ?

                  我得到的 3.4.6 错误是 从 'int' 到 'TEnum' 的无效转换,带有一对或两对大括号.

                  The 3.4.6 error I get is invalid conversion from 'int' to 'TEnum', either with one or two pairs of curly brackets.

                  如何在不使用 memset 的情况下将我的结构设置为一堆 0?

                  How can I set my structure to a bunch of 0's without using memset ?

                  提前致谢.

                  推荐答案

                  它将 POD 结构的所有字段初始化为 0.

                  It initialises all fields of the POD structure to 0.

                  理由:

                  const SomeStruct init = {Value};
                  

                  将 SomeStruct 的第一个字段初始化为 Value,将结构的其余部分初始化为零(我忘记了标准中的部分,但它在某处)

                  Initialises the first field of SomeStruct to Value, the rest of the structure to zero (I forget the section in the standard, but it's there somewhere)

                  因此:

                  const SomeOtherStruct init = {{Value}};
                  

                  将结构的第一个字段(其中结构的第一个字段本身就是一个 POD 结构)的第一个字段初始化为 Value,将第一个字段的其余部分初始化为零,将结构的其余部分初始化为 0.

                  Initialises the first field of the first field of the structure (where the first field of the structure is itself a POD struct) to Value, and the rest of the first field to zero, and the rest of the structure to 0.

                  此外,这只是行不通,因为 C++ 禁止将 int 隐式转换为枚举类型,因此您可以这样做:

                  Additionally, this only isn't working because c++ forbids implicit conversion of int to enum types, so you could do:

                  const SomeOtherStruct init = {{TEnum(0)}};
                  

                  这篇关于双花括号初始化 C 结构的含义是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:struct, typedef struct, 在 C++ 中的用途 下一篇:如何在 C++ 中将结构体初始化为 0

                  相关文章

                  <tfoot id='tsooj'></tfoot>
                    • <bdo id='tsooj'></bdo><ul id='tsooj'></ul>
                    <i id='tsooj'><tr id='tsooj'><dt id='tsooj'><q id='tsooj'><span id='tsooj'><b id='tsooj'><form id='tsooj'><ins id='tsooj'></ins><ul id='tsooj'></ul><sub id='tsooj'></sub></form><legend id='tsooj'></legend><bdo id='tsooj'><pre id='tsooj'><center id='tsooj'></center></pre></bdo></b><th id='tsooj'></th></span></q></dt></tr></i><div id='tsooj'><tfoot id='tsooj'></tfoot><dl id='tsooj'><fieldset id='tsooj'></fieldset></dl></div>
                  1. <small id='tsooj'></small><noframes id='tsooj'>

                    1. <legend id='tsooj'><style id='tsooj'><dir id='tsooj'><q id='tsooj'></q></dir></style></legend>