最近研究了下某某源码,发现一些 “别出心裁” 的用法,茶思饭后来总结梳理下。

看到一种获取数组的大小,方式有点特殊,代码类似下面这种形式:

templateinline 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::value;

3.函数模板参数自动推导

template 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许可协议。转载请注明出处,谢谢!