Const数组初始化,如果它太长

Const array initialization if its too long

本文关键字:如果 数组 初始化 Const      更新时间:2023-10-16

在我对这个问题的回答中提到,如果变量被声明为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方法之外,还有其他方法吗?

没有办法直接做到这一点。

在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中的操作符。

你可以使用一个技巧…初始化一个常规数组,然后获取对const数组的引用:

int arr[100];
for (int i=0; i<100; i++) arr[i] = i*i;
const int (&carr)[100] = arr;
相关文章: