获取c ++中具有常量长度的数组的迭代器

时间:2017-08-22 22:05:18

标签: c++ arrays

我在另一个stackoverflow帖子(variable length array error when passing array using template deduction)上读到了以下内容:

#include <iostream>

int input() {
    int a;
    std::cin>>a;
    return a;
}

int main()
{
   const int b = input();

  int sum[b];
  std::begin(sum);
}

除了它似乎没有用之外,我仍然会遇到类似的错误。

 In function 'int main()': 
16:17: error: no matching function for call to 'begin(int [b])' 
16:17: note: candidates are:

随后是可能适合的可能模板的信息。

1 个答案:

答案 0 :(得分:1)

只有当std::begin(sum)是常规数组时才可以使用sum,而不是当它是可变长度数组时。

以下是好的。

const int b = 10;
int sum[b];
std::begin(sum);

在您的情况下,b在编译时是未知的。对于编译时长度未知的数组,最好使用std::vector而不是依赖于编译器特定的扩展。以下是好的。

const int b = input();  // You can use int b, i.e. without the const, also.
std::vector<int> sum(b);
std::begin(sum);