В следующем коде мне нужно получить размер 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;
}
Ты не можешь. Размер массива должен быть константным выражением — это означает, что он должен быть известен во время компиляции. Если это аргумент функции, это невозможно, так как функция может быть вызвана с любым аргументом. Используйте 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
вы хотите создать известен во время компиляции.