我是一名电气工程师,后来成为计算机科学家。我真的很难理解为什么在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_t
是 unsigned
基本类型的 typedef,它应该能够表示程序中任何可能的索引/大小(从技术上讲,它也是 sizeof
运算符的结果).它的底层基本类型在不同的实现上可能不同,并且因为你想要可移植性,你使用 std::size_t
并且不再关心它是 unsigned long int
还是 unsigned long long int
等
std::size_t
没有使用任何不可能以其他方式使用的特性,它只是一个方便的类型别名,仅此而已。
响应 OP 编辑
@HoapHumanoid 编辑对于 StackOverflow 来说不是一个很好的问题,因为这是个人解释/偏好的问题。当然,您可以只有一种数字类型或固定大小的类型,但是当您想从处理器中榨取尽可能多的性能时,您最好有多种,每种都能够代表一个特定的范围,具体取决于 物理 平台。由于计算机体系结构差异很大,因此每种体系结构都会强加自己的大小,例如int
, long
等。当你将这个问题与可移植性结合起来时,size_t
自然而然地出现了。您还会在通用函数中使用什么,例如是否保证在每个可能的实现上分配尽可能多的内存?您会使用 int
来传递字节数吗?或者 long int
?您需要阅读编译器手册,检查适当的类型等,然后使用它。这就是 C++ 实现为您所做的,定义适当的此类类型。
关于c++ - 为什么 size_t 存在于 C/C++ 中并且可以/应该被替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559469/