在这个"元素数量"宏中虚拟添加的目的是什么?

sha*_*oth 8 c++ arrays macros templates visual-c++

Visual C++ 10随stdlib.h一起提供,其中包含此gem:

template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];

#define _countof(_Array) (sizeof(*__countof_helper(_Array)) + 0)
Run Code Online (Sandbox Code Playgroud)

它使用一个聪明的模板技巧来推断数组大小防止指针传入__countof.

+ 0宏定义的目的是什么?它解决了什么问题?

Ash*_*sha 14

这里引用STL

我做了这个改变; 我通常不会攻击CRT,但这个很简单.+ 0使一个虚假的"警告C6260:sizeof*sizeof通常是错误的.你打算使用字符数还是字节数?" from/analyze当有人写_countof(arr)*sizeof(T)时.