_countof 宏

_countof 是 C ++ 中计算一个固定大小数组长度的宏,比如:

T  arr[
10 ];

for ( size_t i  =   0 ; i < _countof(arr);  -- i )   do_something();

对于固定大小数组计算起来非常方便。

/*  _countof helper  */
#if  !defined(_countof)
#if  !defined(__cplusplus)
#define  _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern   " C++ "
{
template 
< typename _CountofType, size_t _SizeOfArray >
char  ( * __countof_helper(UNALIGNED _CountofType ( & _Array)[_SizeOfArray]))[_SizeOfArray];
#define  _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif  

用宏计算的方式容易理解,但是编译期语法检查不够严格。C
++ 中使用了比较严格的语法,确保传入的参数是固定数组。

C
++ 采用type_traits的方式来提取给定数组的信息,通过一个模板函数来完成这个操作:

__countof_helper(UNALIGNED _CountofType (
& _Array)[_SizeOfArray]) 函数来提取_Array的信息:

参数为_Array的引用,保证传入参数必须为固定数组,类型为_CountofType, 大小为_SizeofArray. 

返回值为: 
char  ( * Arr)[_SizeofArray];指向大小为_SizeofArray 的char类型的数组的指针。

 

转载于:https://www.cnblogs.com/duzouzhe/archive/2010/02/10/1667157.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值