我想在一个类中有静态和常量二维数组.数组相对较大,但我只想初始化一些元素,而其他元素可能是编译器初始化它们的任何东西.
例如,如果类定义如下:
class A {
public:
static int const test[10][10];
};
int const A::test[10][10] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
Run Code Online (Sandbox Code Playgroud)
我只对初始化标有'7'的元素感兴趣,我如何在相同的元素上执行此操作,但是使用较大的数组,如数组[1024] [1024]?
Jam*_*ran 32
初始化的数组的任何部分,超出初始化,初始化为0.因此:
int const A::test[10][10]; // uninitialized
int const A::test[10][10] = { {0} }; // all elements initialized to 0.
int const A::test[10][10] = {1,2}; // test[0][0] ==1, test[0][1]==2, rest==0
Run Code Online (Sandbox Code Playgroud)
这意味着您必须初始化的所有内容都是最后一个非零:
int const A::test[10][10] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0}
};
Run Code Online (Sandbox Code Playgroud)
它不是最好的解决方案,但可以节省一些工作.
在初始化之后,无法将const数组分配给const数组.所以你必须编写脚本:
并以这种方式包含您的文件:
class A {
public:
static const int test[10][10];
};
const int A::test[10][10] = {
#include "data.inc" // points to the file generated by script.
};
Run Code Online (Sandbox Code Playgroud)