正题:一个int型数组
int a[] = {/*...*/};
可不可以通过函数来求出它的长度?
int len = size(a);这样的?
我当时回答的是不可以,函数参数只能传指针,长度不能传。如果是字符串的话可以通过'\0'判断,但是int数组不行。然后他又问我想通过函数获得长度怎么办?我当时回答貌似没有办法(我想告诉他多传个长度的参数又不会怀孕,不过没敢说)。
确实没有办法吗?我是在网上找了半天都没找到。
解法1:
template<typename?T,?std::size_t?N>
constexpr?std::size_t?size(T(&a)[N])?{
????return?N;
}
解法2:
WinNT.h中的实现
#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))
int a[] = {/*...*/};
可不可以通过函数来求出它的长度?
int len = size(a);这样的?
我当时回答的是不可以,函数参数只能传指针,长度不能传。如果是字符串的话可以通过'\0'判断,但是int数组不行。然后他又问我想通过函数获得长度怎么办?我当时回答貌似没有办法(我想告诉他多传个长度的参数又不会怀孕,不过没敢说)。
确实没有办法吗?我是在网上找了半天都没找到。
解法1:
template<typename?T,?std::size_t?N>
constexpr?std::size_t?size(T(&a)[N])?{
????return?N;
}
解法2:
WinNT.h中的实现
#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))