通过函数求长度的一点思考
在开发过程中我们经常需要使用到获取数组长度的函数,一般比较常用的是采用宏的方式来获取
#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
在C++中我们可以通过模板的方式来获取数组的长度
template <typename T, int N>
int array_length(const T (&arr)[N])
{
return N;
}
也可以使用更加简单的模板定义
template <class T> int array_length(const T& p) { return sizeof(p)/sizeof(p[0]); }
思考:
这里为什么不能直接使用函数的方式呢?
通过代码实例可以看到,普通的函数传递数组指针后,会被退化成普通指针,从而导致返回的长度不正确。
而通过模板的方式,会被推导成原数组的引用,因此返回的长度就是原先数组的长度。
// 示例代码 template <class T> int array_length(const T& p) { return sizeof(p)/sizeof(p[0]); } template <typename T, int N> int array_len(const T (&arr)[N]) { return N; } // 定义一个数组 int array[10] = {0}; int len = array_length(array); // len=10 len = array_len(array); // len = 10

浙公网安备 33010602011771号