- 论坛徽章:
- 0
|
本帖最后由 donet8 于 2012-06-05 17:56 编辑
VC实现了一个宏,用于计算一个数组的元素的个数,在stdlib里面有两个定义,一个C风格的,一个C++风格的。
- /* _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)) + 0)
- }
- #endif
- #endif
复制代码 我知道C++风格的版本是用了模板参数推导的技巧,网上有很多解释,不必多说了。
我的问题是,C风格的那个定义
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
用在C++代码里面会有什么潜在的问题么? 换句话说,如果没有C++版本的_countof,只有C版本的那个,会不会有些情况不能处理呢?
各位C++高手指点指点! |
|