int的各种移植性变种

我们知道在C/C++中,标准只是规定了int等等数据类型至少要多少位,所以坏处就是不同的机器上同一个类型关键字可能表示不同的范围。

1.由不确定变为确定

有的应用需要在不管什么机器上都得到绝对的位数,所以就有了

int8_t,int16_t,int32_t,int64_t

uint8_t,uint16_t,uint32_t,uint64_t

以上这些都是不管在什么平台上都是固定的8位,16位,32位,64位,增加了可移植性。


2.由绝对变为相对

经常遇到size_t,ssize_t,sizt_type,socklen_t,unsigned int等等表达,搞地非常糊涂。

在查看了一些资料有

A..《深入理解计算机系统》 10.3节

B.http://jeremybai.github.io/blog/2014/09/10/size-t/

总结如下

(1)size_t与unsined int

①unsigened int在不同的机器上都有一个最低的实现要求。

所以可以将unsigned int最低要求的位数看做一个绝对值

而在表达比如一个数组最大有多少个元素的时候,受到这个机器的位数限制。

而不同的机器位数不同,小位数的机器上无需这么大,大位数的机器有可能又不够。

所以size_t就表示某个机器的最大值,是一个相对值

(2)ssize_t和socklen_t

这两个都是有符号类型。

ssize_t当然和size_t相对应,表示某一机器上的最大的范围了,不同的是ssize_t是最大的有符号数。

而socklen_t是表示描述符的,应该使用int,但是编写socket源码的人错误地使用了unsigned int,又不想承认错误修改为int,就自创了一个类型,其实质就是int

(3)size_type

在STL里面针对各个容器,表示其能够表示的大小而专门定义的数据类型,其实质就是size_t


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值