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:谢谢,编辑了代码。