数组的大小计算,不就是一个sizeof吗?
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int a[]{1,2,3,4,5,6,7,8,9,0};
cout << sizeof(a)/sizeof(int) << endl;
}
结果正确。写成函数,应当没有问题吧。
int lenOfArray(int a[])
{
return sizeof(a)/sizeof(int);
}
结果必须不正确。因为数组名作参数,传过去的是 指针变量,编译器支提示我们 它sizeof(a)是指 sizeof(int*)。
指针不行,引用行吧。
int lenOfArray(int (&a)[])
{
return sizeof(a)/sizeof(int);
}
不能调用。因为sizeof函数反馈引用a定义不确定。a可以用来引用各种大小的对象。
有什么办法呢?
模板出来了。
template<typename T>
int lenOfArray(T &a){
return sizeof(a)/sizeof(a[0]);
}
结果正确。 这个T在应用的时候,确定为引用对象的正确形式。
模板真是强大的。
还有更强大方便的。
template<typename T, int N>
int lenOfArray(T(&arr)[N])
{
return N;
}
结果正确,不用计算的。直接利用的模板填写时的成果。
这一历程告诉我们,要正确的判断 参数的性质,利用模板的填写机制。