为什么 size_t 存在于 C/C++ 而 could/should 被替换?

Why size_t exists in C/C++ and could/should it be replaced?

我是一名电气工程师,现在是计算机科学家。我真的很难理解为什么在C++中有那么多几乎相同但又不完全相同的东西。一个例子是 short vs int vs unsigned int vs size_t vs long int vs long long int vs uint8_t(我不知道如果有任何其他方法来指定整数)。似乎它使语言不必要地复杂化。

可以或应该 size_t 被替换,或者它是否有任何无法以其他方式使用的功能?


[编辑]

在提供了有用的答案之后,还有一些我还没有完全理解的地方。正如几个人所建议的,size_t 在便携性和性能方面很有用。但是有多大帮助,是否有 定量方法 或数字证据来衡量仅 int 并退休其所有兄弟的优势???

std::size_tunsigned 基本类型的 typedef,它应该能够表示程序中任何可能的 index/size(从技术上讲,它也是sizeof 运算符)。它的底层基本类型在不同的实现上可能会有所不同,并且因为您想要可移植性,所以您使用 std::size_t 并且不再关心它是 unsigned long int 还是 unsigned long long int

std::size_t 不使用任何无法以其他方式使用的功能,它只是一个方便的类型别名,仅此而已。

回应 OP 编辑​​

@HoapHumanoid 编辑对于 Whosebug 来说不是一个很好的问题,因为这是个人问题 interpretation/preference。当然你可以只有一种数字类型,或者 fixed-size 类型,但是当你想从你的处理器中榨取尽可能多的性能时,你最好有很多,每个都能够代表一个特定的范围,这取决于 物理 平台。由于计算机体系结构差异很大,因此每种体系结构都会强加自己的大小,例如intlong等。当你将这个问题与可移植性结合起来时,那么size_t自然而然地出现了。您还会在通用函数中使用什么,例如是否保证在每个可能的实现 上分配尽可能多的内存?您会使用 int 来传递字节数吗?或者 long int?您需要阅读编译器手册,检查适当的类型等,然后使用它。这就是 C++ 实现为您所做的,定义了适当的此类类型。

您忘记了 long long int,大部分未签名的版本,uint8_t 和朋友,可能还有更多。 :-)

在某些语言中,整数类型的大小是固定的。 C++ 不是其中之一;为程序员提供了很大的灵活性,可以根据大小和范围平衡性能。

但是size_t非常有用。它保证能够容纳任何对象的大小,或任何有效的数组索引。没有它会使编写可移植但高效的程序变得更加困难。