为什么size_t是无符号的?

Bjarne Stroustrup用C ++编程语言写道:


无符号整数类型是将存储视为位数组的理想选择。使用无符号而不是整数来获得更多的比特来表示正整数几乎不是一个好主意。通过声明无符号变量来确保某些值是正值的尝试通常会被隐式转换规则所破坏。


size_t似乎是无符号的,“可以再获得一位代表正整数”。那么这是一个错误(或折衷方案)吗?如果是这样,我们是否应该在自己的代码中尽量减少使用它?


Scott Meyers的另一篇相关文章在这里。总之,他建议不要使用unsigned in接口,无论该值是否始终为正。换句话说,即使负值没有意义,也不必使用无符号。


梦里花落0921
浏览 569回答 3
3回答

慕沐林林

size_t是unsigned因为负数大小没有意义。(摘自评论:)声明是什么,而不是要确保。您什么时候最后一次看到-1号清单?遵循该逻辑太远,您会发现unsigned根本不应该存在,也不应该允许位操作。– 怪胎更重要的是:出于您应该考虑的原因,地址未签名。大小是通过比较地址生成的;将地址视为带符号的地址会做很多错误的事情,使用带符号的值作为结果将丢失数据,而您对Stroustrup报价的阅读显然认为可以接受,但实际上不可接受。也许您可以解释一个否定地址应该怎么做。– 怪胎
打开App,查看更多内容
随时随地看视频慕课网APP