我确实意识到这个标题一开始可能听起来很傻,但请耐心等待我一会儿。:)
自从我开始使用size_tandptrdiff_t之后,我就再也没有使用过 forint,在我的记忆中。
我记得最近使用的唯一整数数据类型属于以下类别之一:
(无符号)与某个内存数据结构(例如
vector)的索引相关联的整数。
几乎总是,最合适的类型是size_t(或者...::size_type,如果您要加倍努力)。
即使整数实际上并不代表索引,但通常它仍然与某个索引相关联,因此仍然size_t是合适的。的签名版本
size_t。在许多情况下,最合适的类型似乎是ptrdiff_t,因为通常当您需要它时,您正在使用迭代器——因此size_t和ptrdiff_t都适合它们。long. 我偶尔需要这个_InterlockedIncrement(引用计数)。(
unsigned)long long,用于保存文件大小。unsigned int或者unsigned long,用于“计数”目的(例如,每 100 万次迭代,更新 UI)。unsigned char用于对内存的原始字节级访问。
(旁注:我从来没有发现任何一个用途signed char。)intptr_t以及uintptr_t偶尔存储操作系统句柄、指针等。
的一个特殊方面int是你不应该溢出它(因为它是未定义的行为),所以你甚至不能可靠地使用它来进行计数——特别是如果你的编译器将它定义为 16 位。
那么,您应该何时使用int(除了您的依赖项已经需要它时)?
现在它有什么真正的用途,至少在新编写的可移植代码中?