我有很多我的代码是无符号数的常数,例如中计数器,截止频率,长度等。我开始使用std::size_t
所有这些,而不是int
或unsigned int
。
这是正确的做法吗?我开始它,因为STL容器使用它的大小,它用于字符串位置等。
我有很多我的代码是无符号数的常数,例如中计数器,截止频率,长度等。我开始使用std::size_t
所有这些,而不是int
或unsigned int
。
这是正确的做法吗?我开始它,因为STL容器使用它的大小,它用于字符串位置等。
std::size_t
是用于计算内存位置的类型,如数组长度,对象的大小等。STL容器是使用container_type::size_type
,这将通常映射到std::size_t
,但不保证这样做。
如果您需要持有不用于上述目的的非负积分的类型,unsigned short
,unsigned int
和unsigned long
有什么问题?
可以将size_t用于表示存储在内存中的对象大小的变量。但没有太多理由将它用于其他任何事情。它的存在主要是因为unsigned int可能不足以表示内存对象的大小。 (考虑一个具有16位整数但32位地址空间的体系结构)。
size_t实际上是一个在stddef.h中定义的typedef,它依赖于平台,因此您无法对此做任何假设。在gcc 4.4(i486)上它被定义为一个长整型unsigned int,除非操作系统已经定义了它,所以例如在i386机器上的Free BSD 5上它将是unsigned int,而在ia64机器上它将是一个无符号long。 因此,举例来说,如果你试图做类似
size_t i;
...
char buf[4];
sprintf(buf,"%u",i);
有时它会运行,但在某些平台/编译器中你会得到一个缓冲区溢出。
我的观点是,如果您必须对size_t的大小/类型进行假设,这可能会导致一些讨厌的可移植性问题。
这听起来真的很有意思,为什么不用int去呢? – 2010-06-06 22:48:53
[何时使用std :: size_t?]的有效重复(http://stackoverflow.com/questions/1951519/when-to-use-stdsize-t) – 2010-06-06 22:50:58
请参阅:http://stackoverflow.com/questions/ 1951519 /时使用的-stdsize叔 – 2010-06-06 22:49:16