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

时间:2009-12-22 22:15:55

标签: c++

此外,变量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 个答案:

答案 0 :(得分:2)

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

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

但是,Visual Studio 6是一个预标准编译器。它是在C ++ 98标准出台之前发布的。

答案 1 :(得分:1)

Michael Burr's answer查看类似的question

简短的回答是肯定的,但稍微强调有时会有所帮助,例如

stTest s = {0};

答案 2 :(得分:0)

初始化是一样的。 Visual Studio 2.0已损坏。

<小时/> 编辑:

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

答案 3 :(得分:0)

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可能会忽略空集并且不会尝试初始化任何内容。