【问题标题】:default initialization of double array of pointers in c++?c++中双指针数组的默认初始化?
【发布时间】:2012-07-17 19:00:09
【问题描述】:

当我声明一个固定大小的数组时,我很好奇这些是否初始化为零并且我的所有指针都是 0。我可以说foo* arr[1000][1000],我看到所有条目都是 0..但我不确定这是否是我可以依赖的东西。我可以说foo* arr[1000][1000] = {},但是这个双数组是类中的成员变量,如果没有必要,我不希望在构造函数中有双循环......

【问题讨论】:

    标签: c++ arrays default-value


    【解决方案1】:

    这取决于上下文。如果数组是在命名空间级别定义的,那么静态初始化将为您将所有指针设置为空。如果它是在函数范围内或作为类的成员定义的,则没有这样的保证。

    由于它是一个类的成员,它不会被正确初始化,所以你需要手动初始化它。您可以通过将arr() 添加到初始化列表中来实现。作为指针,您可以使用 memset 在一次调用中将整个数组设置为 0(这也将尽可能高效),但请注意,这仅适用于 POD 类型。

    【讨论】:

    • 在实践中,也许。就标准而言,在指针上使用memset 时得到的是未定义的行为;不能保证空指针的所有位都设置为零。使用std::fill 也可能会更快。
    【解决方案2】:

    取决于你如何分配数组。

    如果是static或者全局,那么内容会全部初始化为0。如果是局部变量,那么内容不会被初始化。

    因此,由于您的数组是成员变量,因此不会自动将其初始化为 0。但是,您可以使用构造函数中的初始化列表将所有变量初始化为零:

    struct A {
        //    VVV   value-initialises the contents of arr
        A() : arr() { }
    
        double arr[x][y];
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多