// sizeofarray.cpp
#include <iostream>
template <typename T,int N>
int size(T (&Array)[N])
{
return N;
}
int main()
{
char p[]="Je suis trop bon, et vous?";
char q[size(p)]; // (A)
return 0;
}
我听说 C++ 中的数组大小必须是常量表达式。所以 char q[size(p)]
是无效的,对吗?但是当我尝试时没有错误
g++ -Wall sizeofarray.cpp
为什么?
最佳答案
赞Prasoon says ,它不是一个常量表达式。现在,您可以获得数组大小的常量表达式值,如下所示:
template <std::size_t N>
struct type_of_size
{
typedef char type[N];
};
template <typename T, std::size_t Size>
typename type_of_size<Size>::type& sizeof_array_helper(T(&)[Size]);
#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
说明 here .您基本上将数组的大小编码为一种类型的大小,然后获取该类型的 sizeof
,从而得到:
char q[sizeof_array(p)];
关于c++ - 在另一个数组中使用一个数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831158/