0

在下面的代码中,我需要获取std::array函数参数的大小。我更喜欢std::arraystd::vector因为容器的大小不应该改变。但是,编译器抱怨为error: ‘n’ is not a constant expression. 如何通过函数参数获取数组的大小?

主.cpp:

#include <iostream>
#include <array>

using namespace std;

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

int main()
{    
    fnc(5);    

    return 0;
}
4

3 回答 3

3

你不能。数组的大小必须是常量表达式——这意味着它必须在编译期间知道。如果它是函数参数,则不可能,因为可以使用任何参数调用该函数。使用 std::vector - 很可能您不会看到任何性能差异。

于 2014-07-15T21:35:18.697 回答
0

函数参数不是常量表达式。改用模板参数:

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

int main()
{
    fnc<5>();
}
于 2014-07-15T21:39:15.190 回答
0

你想使用这样的模板化函数

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

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

只要std::array您要创建的大小在编译时已知,这将起作用。

于 2014-07-15T21:40:54.097 回答