sizeof的返回值

最近在看webkit,在WTF/wtf/OwnPtrCommon.h有一段关于sizeof的:

    template <typename T> inline void deleteOwnedPtr(T* ptr)
    {
        typedef char known[sizeof(T) ? 1 : -1];
        if (sizeof(known))
            delete ptr;
    }

既然webkit这么写,那么肯定合理了,于是查阅资料总结一下,sizeof的返回值:

1.正值

常见,

2.零值

确实存在0,在一下代码中:

int buf[0];
sizeof(buf)    //0

有些编译器支持数组元素个数为0的,至少我在g++上就可以通过。

返回上面的webkit源码

如果sizeof(T)为0,则sizeof(known)=-1。那么,上面的代码就好理解了。

3.负值

int len = -2;
int p[len];
sizeof(p)    //-8

说明了为负值的情况。


读一读webkit源码收获蛮大的,里面代码的兼容性和可移植性等确实值得学习,用到的一些技巧很能提高个人的编程内功。

注:以上所有代码均在gcc (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)上编译通过。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值