如何在 C++ 中初始化静态数组

How to initialize a static array in C++

鉴于以下非常基本的功能,我如何将 arr 初始化为所有随机值,以及如何将 arr 初始化为一组给定值,比如数字 0-11?

void func() {
    static int arr[2][2][3];
}

以我对静态变量和C++的一般知识有限,我认为静态数组需要在一行中初始化,所以当再次调用该函数时,它不会重新初始化。基本上,我想说:

static int arr[2][2][3] = another_array

但这会引发一个错误,即 'another_array' 不是初始化列表。我查找了初始值设定项列表,但它们都包含 类 和其他我不理解的内容。有没有办法初始化这个数组?感谢任何帮助。

从技术上讲,如果您尝试在单独的行中分配 arr 的值,它在第一次初始化后将永远不会是 re-initialzied。它将是 re-assigned。但根据您的描述,我认为这就是您要防止的行为。

因此要在同一行中初始化 arr,您可以先创建一个函数来为您生成所需的数字,然后在初始化 arr 期间多次调用该函数:


int gen_num() {
    // some code to return a random number for you...
}

void func() {
    // I reduced `arr` to a 2D array, to make the code shorter. Making it a 3D array basically works the same
    static int arr[2][3] = {{gen_num(), gen_num(), gen_num()}, {gen_num(), gen_num(), gen_num()}};
}

请注意,如果您将 arr 设为 std::array 而不是 C-style 数组,那么您实际上可以在单独的函数中构建一个数组,然后只需 return 该函数的新数组:

std::array<std::array<int, 3>, 2> create_array()
{
    std::array<std::array<int, 3>, 2> result;
    // here you can assign each value separately
    result[0][0] = 20;
    result[2][1] = 10;

    // or use for loop freely as needed
    for(auto& arr : result)
    {
        for(auto& value : arr)
        {
            value = get_num();
        }
    }

    return result;
}

void func() {
    // Basically the same as having `int arr[2][3]`
    static std::array<std::array<int, 3>, 2> arr = create_array();
}