Получение второго аргумента (размера) std :: array в качестве аргумента функции

В следующем коде мне нужно получить размер std::array в качестве аргумента функции. Я предпочел std::array в std::vector размер контейнера не должен меняться. Тем не менее, компилятор жалуется как error: ‘n’ is not a constant expression, Как я могу получить размер массива через аргумент функции?

main.cpp:

#include <iostream>
#include <array>

using namespace std;

void fnc(const int n)
{
array<int,n> a;
}

int main()
{
fnc(5);

return 0;
}

0

Решение

Ты не можешь. Размер массива должен быть константным выражением — это означает, что он должен быть известен во время компиляции. Если это аргумент функции, это невозможно, так как функция может быть вызвана с любым аргументом. Используйте std :: vector — скорее всего, вы не увидите никакой разницы в производительности.

3

Другие решения

Параметры функции не являются константными выражениями. Вместо этого используйте аргумент шаблона:

template<int n>
void fnc()
{
std::array<int, n> a;
}

int main()
{
fnc<5>();
}
0

Вы хотите использовать шаблонную функцию, как это

template <size_t N>
void func()
{
array<int, N> a;
}

int main()
{
func<5>();
return 0;
}

Это работает до тех пор, пока размер std::array вы хотите создать известен во время компиляции.

0