//前提条件是能使用c++11中decltype来推断数组元素的类型
//在此之前考虑到c++并没有求数组长度的函数,于是决定自己来写一个。但是后来发现不可行!
//原因是c/c++在将数组传给函数的时候总是会将指向数组的指针给强制转换成一般的指针,因此也就无法通过sizeof(arrayName)来获取数组的长度了。
//最后才考虑到带参数的宏来做这件事情,其中用到了类型推断函数decltype。
//这个代码写的不是很好。如果大家看了觉得有什么问题给我留言,我们可以交流一下。
#include <iostream>
using namespace std;
class test{
public:
test(){}
private:
int element;
};
int array1[] = {1,2,3,};
char array2[] = {1,2,3,4};
float array3[] = {1,2,3,4,5};
double array4[] = {1,2,3,4,5,6};
string array5[] = {"ad","b","c","d","dfd","sdfs","eee"};
test array6[8];
#define getArrayLength(_arrayName) sizeof(_arrayName)/sizeof(decltype(_arrayName[0]))
int main()
{
cout<<getArrayLength(array1)<<endl;
cout<<getArrayLength(array2)<<endl;
cout<<getArrayLength(array3)<<endl;
cout<<getArrayLength(array4)<<endl;
cout<<getArrayLength(array5)<<endl;
cout<<getArrayLength(array6)<<endl;
return 1;
}