正文

count_of 之 宏实现 和 模板实现 的比较2006-03-21 10:29:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bruceteen/11244.html

分享到:

count_of 的作用是编译时静态获取数组元素数目,C中必须使用宏实现:
#define count_of(a) (sizeof(a)/sizeof(a[0]))
C++中还可以使用模板实现:
template<typename T,size_t N> inline size_t count_of( T (&)[N] ) { return N; }

宏实现的优点是:C和C++均可使用
模板实现优点是:可以禁止掉不合法的应用

C宏实现的事例代码:
#include <stdio.h>
#define count_of(a) (sizeof(a)/sizeof(a[0]))
int main( void )
{
    char a[12];
    int b[3][4];
    char* p = 0;

    printf( "%u\n", count_of(a) ); // 输出12
    printf( "%u\n", count_of(b) ); // 输出3
    printf( "%u\n", count_of(p) ); // 用法错误,但编译时却无法检测出来
}

C++模板实现的事例代码:
#include <iostream>
template<typename T,size_t N> inline size_t count_of( T (&)[N] ) { return N; }
int main( void )
{
    char a[12];
    int b[3][4];
    char* p = 0;

    std::cout << count_of(a) << std::endl; // 输出12
    std::cout << count_of(b) << std::endl; // 输出3
    // std::cout << count_of(p) << std::endl; // 编译时直接报错
}

注:像VC++6.0之类的烂编译器不支持参数数组引用,请使用 g++ 或 vc++8.0 。

阅读(3720) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册