【问题标题】:Zero initialize multidimentional array in class constructor C++在类构造函数C++中零初始化多维数组
【发布时间】:2015-07-13 08:32:28
【问题描述】:

有没有办法(使用 C++11)在类构造函数中对 多维 数组进行零初始化?

这会将整个数组初始化为零还是仅将第一个维度初始化?

class Example
{
public:
    int array[100][100];

    Example():array{}
    {
    };
};

最后,这是否适用于枚举类型?

【问题讨论】:

    标签: c++ c++11 multidimensional-array constructor initialization


    【解决方案1】:

    多维数组的值初始化(即使用{})对所有元素进行值初始化,因此所有 10000 个元素的值都为 0。

    【讨论】:

    • 是的,它们也将是 0。
    【解决方案2】:

    数组的值初始化将对数组中的每个元素进行值初始化。您有一个数组数组,因此每个元素(一个数组)都将进行值初始化。从那里,回到这个答案的第一句话,了解每个数组会发生什么。

    第二个问题的答案是,常规枚举是标量,因此是值初始化的,就像数组中的 int 值一样,也就是说它们是零初始化的。如果您有一个没有 0 值表示的枚举,那可能会出现问题:

    #include <iostream>
    
    enum EnumStuff
    {
        one = 1,
        two = 2,
        three = 3
    };
    
    int main()
    {
        EnumStuff arr[10][10]{};
        for (auto const&x : arr)
        {
            for (auto y : x)
                std::cout << static_cast<int>(y) << ' ';
            std::cout << '\n';
        }
    }
    

    EnumStuff 中没有 0 值。只是要记住的事情。例如,switch 仅寻找这三个值会非常失望(不久之后,您可能会感到失望)。

    祝你好运

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多