获取数组大小的几种方式
最近研究了下某某源码,发现一些 “别出心裁” 的用法,茶思饭后来总结梳理下。
看到一种获取数组的大小,方式有点特殊,代码类似下面这种形式:
template<typename T, size_t N>
inline size_t ArraySize(const T (&arr)[N])
{
return N;
}
有的小伙伴会问,这里编译器为什么可以推导出数组 N 的值?
其实很好理解,参数arr是引用,定义的时候大小是已知的,编译器在上下文调用中能推导出来。
如果参数改为 T arr[N],编译器理解为T* arr(数组作为函数参数,传递的是数组的起始地址),而 N 则被忽略,数组大小是未知的。
顺便总结下获取数组大小的几种方式:
1.通过sizeof获取
int arr[4];
int arrSize = sizeof(arr) / sizeof(arr[0]);
2.标准C++模板库
int arr[4];
int arrSize = std::extent<decltype( arr ), 0>::value;
3.函数模板参数自动推导
template<typename T, size_t N>
inline size_t ArraySize(const T (&arr)[N])
{
return N;
}
4.boost库函数size()
int arr[4];
int arrSize = boost::size(arr);
作者:博客园博主 KeepHopes,对大数据、人工智能领域颇感兴趣,请多多赐教! 原文链接:https://www.cnblogs.com/yuwanxian/p/14059506.html 版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。转载请注明出处,谢谢!