代码之家  ›  专栏  ›  技术社区  ›  Christian Ammer

下列结构和数组的所有成员是否都初始化为零?

c++
  •  0
  • Christian Ammer  · 技术社区  · 15 年前

    此外,变量1和变量2的初始化与变量3和变量4的初始化有区别吗?问题的背景是,在Visual Studio 6.0中,初始化变量2和4时出现编译器错误。使用Visual Studio 2008,它可以很好地编译。

    struct stTest
    {
      int a;
      char b[10];
    };
    
    stTest one = {0};
    stTest two = {};
    stTest three[10] = {0};
    stTest four[10] = {};
    
    4 回复  |  直到 15 年前
        1
  •  2
  •   AnT stands with Russia    15 年前

    是的,所有这些都需要用语言标准(C++ 98)初始化0。

    已知Visual Studio 6无法正确处理 {} 案例:它甚至不支持 {} 语法,如果我记得正确的话。

    然而,Visual Studio 6是一个标准前编译器。它是在C++ 98标准发布之前发布的。

        2
  •  1
  •   Community CDub    8 年前

    Michael Burr's answer 类似 question .

    简短的回答是肯定的,但强调一点有时会有帮助, 例如 ,

    stTest s = {0};
    
        3
  •  0
  •   Richard Pennington    15 年前

    初始化是相同的。Visual Studio 2.0已损坏。


    编辑:

    是的,它们被初始化为零。

        4
  •  0
  •   A. Walton    15 年前

    ( Ripped from MSDN )

    如果我有一个叫做tpoint的结构…

        struct tPoint {   
            int x;   
            int y;
        };
    

    …我使用它如下…

    tPoint spot {10,20};
    

    …我可以预期成员x和y将被初始化。

    对于您的第一个问题,我希望数组B没有初始化,因为您只给了一个初始化值。

    默认情况下,可以将值初始化为零:

    struct stTest
    {
      int a = 0;
      char b[10] = {0};
    };
    

    您可以这样初始化数组:

    char i[10] = {0};
    stTest one = {0, i};
    

    至于为什么它使用vs 2008而不是vs 6.0编译,vs 2008可能会忽略空集,并且不尝试初始化任何内容。