将std :: array的第二个参数(大小)作为函数参数

时间:2014-07-15 21:32:47

标签: c++ c++11 constant-expression stdarray

在下面的代码中,我需要将std::array的大小作为函数参数。我更喜欢std::arraystd::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 个答案:

答案 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的大小在编译时已知,就可以正常工作。