Получение второго аргумента (размера) 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;
}

3 ответа

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

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

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

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

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

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

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

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

Другие вопросы по тегам