【问题标题】:Const array initialization if its too long [closed]常量数组初始化如果它太长[关闭]
【发布时间】:2015-08-25 19:31:25
【问题描述】:

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 之外,还有其他方法吗?

【问题讨论】:

  • 你能详细说明一下吗?我不明白你在问什么
  • @CoryKramer 我认为他是说他不能在定义后修改 const int[],因此他不能初始化它。
  • const int ar[100]; 甚至不是合法的 C++,你不能让数组未初始化
  • 我想这是我对this answer 的评论的后续问题?在这种情况下,只需检查您对该问题的真诚回答即可。
  • 没有标准的方法可以做到这一点。 Here is a very similar question 我的回答非常相似,还有一些建议非标准 gcc 扩展的答案。

标签: c++ c


【解决方案1】:

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

在 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 中的运算符。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 酷,这有点作弊,哈哈....不过是个好方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2021-05-07
    • 2013-01-20
    • 1970-01-01
    • 2010-12-14
    • 2016-10-28
    • 2019-06-24
    相关资源
    最近更新 更多