C++ 获取std::array的第二个参数(size)作为函数参数

C++ 获取std::array的第二个参数(size)作为函数参数,c++,c++11,constant-expression,stdarray,C++,C++11,Constant Expression,Stdarray,在下面的代码中,我需要获取std::array的大小作为函数参数。我更喜欢std::array而不是std::vector,因为容器的大小不应该改变。但是,编译器抱怨为错误:“n”不是常量表达式。如何通过函数参数获得数组的大小 main.cpp: #include <iostream> #include <array> using namespace std; void fnc(const int n) { array<int,n> a; } i

在下面的代码中,我需要获取
std::array
的大小作为函数参数。我更喜欢
std::array
而不是
std::vector
,因为容器的大小不应该改变。但是,编译器抱怨为
错误:“n”不是常量表达式。如何通过函数参数获得数组的大小

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;
无效fnc(常数整数n)
{
阵列a;
}
int main()
{    
fnc(5);
返回0;
}

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

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

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

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

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

模板
无效fnc()
{
std::数组a;
}
int main()
{
fnc();
}

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

模板
无效fnc()
{
std::数组a;
}
int main()
{
fnc();
}

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

模板
无效fnc()
{
std::数组a;
}
int main()
{
fnc();
}

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

模板
无效fnc()
{
std::数组a;
}
int main()
{
fnc();
}

您想使用这样的模板函数吗

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

int main()
{
func<5>();
return 0;
}
模板
void func()
{
阵列a;
}
int main()
{
func();
返回0;
}

只要您要创建的
std::array
的大小在编译时是已知的,它就可以工作。

您想使用这样的模板函数吗

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

int main()
{
func<5>();
return 0;
}
模板
void func()
{
阵列a;
}
int main()
{
func();
返回0;
}

只要您要创建的
std::array
的大小在编译时是已知的,它就可以工作。

您想使用这样的模板函数吗

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

int main()
{
func<5>();
return 0;
}
模板
void func()
{
阵列a;
}
int main()
{
func();
返回0;
}

只要您要创建的
std::array
的大小在编译时是已知的,它就可以工作。

您想使用这样的模板函数吗

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

int main()
{
func<5>();
return 0;
}
模板
void func()
{
阵列a;
}
int main()
{
func();
返回0;
}

只要要创建的
std::array
的大小在编译时是已知的,这就可以工作。

模板参数必须是在编译时值已知的表达式,因为它们成为模板专用化类型的一部分。因此,函数参数不能用作模板参数。这反映了
array
在编译时具有固定的大小。如果您想要具有不允许大小更改的数据结构,可以编写
std::vector
@Shibli的薄型包装器。您的示例没有显示您使用正确的参数调用
fnc
。您打算如何使用它?@Pradhan:谢谢,编辑了代码。模板参数必须是在编译时已知其值的表达式,因为它们成为模板专门化类型的一部分。因此,函数参数不能用作模板参数。这反映了
array
在编译时具有固定的大小。如果您想要具有不允许大小更改的数据结构,可以编写
std::vector
@Shibli的薄型包装器。您的示例没有显示您使用正确的参数调用
fnc
。您打算如何使用它?@Pradhan:谢谢,编辑了代码。模板参数必须是在编译时已知其值的表达式,因为它们成为模板专门化类型的一部分。因此,函数参数不能用作模板参数。这反映了
array
在编译时具有固定的大小。如果您想要具有不允许大小更改的数据结构,可以编写
std::vector
@Shibli的薄型包装器。您的示例没有显示您使用正确的参数调用
fnc
。您打算如何使用它?@Pradhan:谢谢,编辑了代码。模板参数必须是在编译时已知其值的表达式,因为它们成为模板专门化类型的一部分。因此,函数参数不能用作模板参数。这反映了
array
在编译时具有固定的大小。如果您想要具有不允许大小更改的数据结构,可以编写
std::vector
@Shibli的薄型包装器。您的示例没有显示您使用正确的参数调用
fnc
。你打算如何使用它?@Pradhan:谢谢,编辑了代码。