size_t vs C++和/或C中的int

Joh*_*ang 29 c c++ size-type

为什么在C++容器中,它返回的是size_type而不是int?如果我们正在创建自己的结构,我们是否也应该鼓励使用size_type

D.S*_*ley 26

通常,size_t每当您测量某物的大小时都应该使用.真的很奇怪,size_t只需要在0和SIZE_MAX字节之间表示,并且SIZE_MAX只需要65,535 ......

C++和C标准的其他有趣约束是:

  • 返回类型sizeof()size_t,它是无符号整数
  • operator new()获取要分配的字节数作为size_t参数
  • size_t 定义于 <cstddef>
  • SIZE_MAX<limits.h>在C99中定义但在C++ 98中没有提到?!
  • size_t不包括在名单基本整数类型,所以我一直认为size_t是基本类型之一的类型别名:char,short int,int,和long int.

如果你计算字节数,那么你肯定应该使用size_t.如果你在计算元素的数量,那么你应该使用,size_t因为这似乎是C++一直在使用的.在任何情况下,您都不想使用int- 至少使用unsigned longunsigned long long使用TR1.或者......甚至更好...... typedef无论你最终使用size_type或只是包括<cstddef>和使用std::size_t.

  • size_t不仅要求达到64k,还需要能够表示任何对象的大小(在C标准中,我认为,所以C++标准可能没有提到它).几乎任何编译器都必须使它与指针大小相同.不像它看起来那么奇怪. (13认同)

Dav*_*ave 9

有几个原因可能是:

  • 类型(size_t)可以定义为该平台上最大的无符号整数.例如,它可能被定义为32位整数或64位整数或其他能够存储很长的无符号值的其他东西
  • 在读取程序时要清楚表明值是一个大小而不仅仅是"常规"int

如果您正在编写一个仅适合您和/或一次性使用的应用程序,那么您可以使用基本的int.如果你正在编写一个库或一些实质性的东西,size_t可能是一个更好的方法.

  • 想象一个简单的新启动的64位操作系统,没有英国媒体报道,你可以做`new char [6 gigs]`,如果你有足够的RAM或交换空间它将会工作.现在,你如何用int管理它?这就是`size_t`背后的原因. (2认同)

And*_*oss 5

有些答案比必要的要复杂得多.size_t是无符号整数类型,保证大到足以存储内存中任何对象的字节大小.实际上,它总是与指针类型相同.在32位系统上,它是32位.在64位系统上,它是64位.