整型(Integer type)

定义: C++没有指定整型的大小, 通常人们认为 short 是 16 位, int 是 32 位, long 是 32 位, long long 是 64 位。

优点:保持声明统一。

缺点: C++ 中整型大小因编译器和体系结构的不同而不同。

结论:
<stdint.h> 定义了 int16_tuint32_tint64_t 等整型,在需要确定大小的整型时可以使用它们代替 shortunsigned long long 等,在 C 整型中,只使用 int。适当情况下,推荐使用标准类型如 size_tptrdiff_t

对整数来说,最常使用的通常不会用到太大,如循环计数等,可以使用普通的 int。 你可以认为 int 至少为 32 位,但不要认为它会多于 32 位,需要 64 位整型的话,可以使用 int64_tuint64_t

对于大整数,使用int64_t。

不要使用 uint32_t 等无符号整型,除非你是在表示一个位组( bit pattern ) 而不是一个数值。即使数值不会为负值也不要使用无符号类型,使用断言( assertion)来保护数据 —— 计算机只会根据变量、返回值等有无符号确定数值正负,仍然无法确定对错。

无符号整型:
不要使用无符号类型表示非负数。
一个常见的 bug:

for (unsigned int i = foo.Length()-1; i >= 0; --i)
{
  // ...
}

上面代码永远不会终止!有时 gcc 会发现该 bug 并报警,但通常不会。类似的 bug 还会出现在比较有符合变量和无符号变量时,主要是 C 的类型提升机制( type-promotion scheme, C 语言中各种内建类型之间的提升转换关系) 会致使无符号类型的行为出乎你的意料。
因此,使用断言声明变量为非负数,不要使用无符号型。

猜你喜欢

转载自blog.csdn.net/weixin_34366546/article/details/91030166