在下面的代码中,我需要将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 :(得分:3)
你做不到。数组的大小必须是常量表达式 - 这意味着在编译期间必须知道它。如果它是函数参数,则不可能,因为可以使用任何参数调用该函数。使用std :: vector - 很可能你不会看到任何性能差异。
答案 1 :(得分:0)
函数参数不是常量表达式。改为使用模板参数:
template<int n>
void fnc()
{
std::array<int, n> a;
}
int main()
{
fnc<5>();
}
答案 2 :(得分:0)
您想要使用像这样的模板化函数
template <size_t N>
void func()
{
array<int, N> a;
}
int main()
{
func<5>();
return 0;
}
只要您想要创建的std::array
的大小在编译时已知,就可以正常工作。