Bjarne Stroustrup在C++编程语言中写道:
无符号整数类型非常适合将存储视为位数组的用途.使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意.通过声明无符号变量来确保某些值为正的尝试通常会被隐式转换规则所取代.
size_t似乎是无符号的"再获得一位代表正整数".那么这是一个错误(或权衡),如果是这样,我们应该在我们自己的代码中最小化它的使用吗?
Scott Meyers的另一篇相关文章就在这里.总而言之,他建议不要使用无符号in接口,无论值是否总是正数.换句话说,即使负值没有意义,也不一定要使用无符号.
我总是使用unsigned int来表示永远不应该是负数的值.但是今天我在代码中发现了这种情况:
void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize,
unsigned optionalDataSize )
{
If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) {
// Optional data fits, so add it to the header.
}
// BUG! The above includes the optional part even if
// mandatoryDataSize > bitsAvailable.
}
Run Code Online (Sandbox Code Playgroud)
我应该开始使用int而不是unsigned int来表示数字,即使它们不能为负数吗?
我很困惑size_t.我知道这是一个未签名的类型..正确吗?我的问题是,何时应该使用它.是否有理由将它与常规数组一起使用?我的意思是必须声明数组大小真的很大,如此巨大,以至于常规的无符号或有符号无法处理它.然后一个size_t人能够处理它吗?有人能举个例子吗?
我需要迭代最多包含 25,000 个项目的数组。
使用类型的迭代器unsigned short(而不是int)是否会带来任何改进,例如更快的运行时间、更少的内存或更高的可读性?
(我知道 25,000 就编程而言并不算“多”——但我仍然希望尽可能高效)。
这个问题被翻译成这样,假设我有
#define SIZE 25000
Run Code Online (Sandbox Code Playgroud)
是
for (int i = 0; i < SIZE; i++)
Run Code Online (Sandbox Code Playgroud)
有什么比
for (unsigned short i = 0; i < SIZE; i++)
Run Code Online (Sandbox Code Playgroud)