Const数组初始化如果太长

时间:2015-06-10 13:43:43

标签: c++ c

In my answer对此question有人提到,如果变量声明为const,我发布的代码将无效。

如果我想初始化const类型

的长数组,该怎么办?
int main (){
    const int ar[100];
 //this is invalid in c++
 //something like this

    for (int i=0;i <100;++i)
        ar[i]=i;
    return 0;
}

除了使用该问题中提出的#define method之外,还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

没有黑客可以直接做到这一点。

在C ++中解决这个问题的一种方法是利用它们的构造函数const对象内部仍然可以修改的事实。因此,您可以将数组包装到类中并在构造函数

中初始化它
struct Arr 
{
  int a[100];

  A() 
  {
    for (unsigned i = 0; i < 100; ++i)
      a[i] = i;
  }
};

然后宣布

const Arr arr;

当然,现在您必须以arr.a[i]方式访问它,除非您覆盖Arr中的运算符。

答案 1 :(得分:1)

您可以使用技巧...初始化常规数组,然后获取对const数组的引用:

int arr[100];
for (int i=0; i<100; i++) arr[i] = i*i;

const int (&carr)[100] = arr;