尝试从非 const 大小初始化 std::array 时如何修复编译器错误

How to fix compiler error when try to initialise a std::array from a non const size

我知道我可以使用向量,但我不需要向量的额外特征,所以想使用 std::array。我遇到的问题是我从用户那里得到数组的大小——从标准输入。然后我知道大小并从那里初始化数组。

我尝试了以下代码,但出现编译错误,如图所示。我还尝试了 constexpr 和 fsize。

如何编辑我的代码以根据编译时未知的大小创建 std::array?

int main() {

  int size;
  cin >> size;

  const int fsize = size;
  // below line compile error
  std::array<int, fsize> items;
}

编译错误:

error C2971: 'std::array' : template parameter '_Size' : 'fsize' : a local variable cannot be used as a non-type argument
 : see declaration of 'std::array'
   see declaration of 'fsize'

How can I edit my code to create a std::array from a size not known at compile time?

你不能。 std::array 是一个固定大小的数组,它的大小必须是编译时已知的常量。

要创建一个直到运行时才知道其大小的动态数组,您必须使用 new[] 代替:

int *items = new int[fsize];
...
delete[] items;

您最好使用 std::vector,它会为您处理:

std::vector<int> items(fsize);

如果不想用std::vector,可以用std::unique_ptr<int[]>代替:

std::unique_ptr<int[]> items(new int[fsize]);

auto items = std::make_unique<int[]>(fsize);