在整个地方使用std :: size_t是一种好习惯吗?

时间:2010-06-06 22:45:47

标签: c++ variables types

  

可能重复:
  When to use std::size_t?

我的代码中有很多常量是无符号数,例如我开始使用std::size_t来代替intunsigned int

这是正确的做法吗?我开始它是因为STL容器使用它的大小,它用于字符串位置等。

3 个答案:

答案 0 :(得分:8)

std::size_t是用于计算内存位置的类型,例如数组长度,对象大小等.STL容器使用container_type::size_type通常映射至std::size_t,但不保证这样做。

如果你需要用于保存非负积分的类型而不是用于上述目的,那么unsigned shortunsigned intunsigned long会出现什么问题?

答案 1 :(得分:3)

size_t实际上是stddef.h中定义的typedef,它依赖于平台,因此您无法对其进行任何假设。在gcc 4.4(i486)上,它被定义为一个长的无符号整数,除非操作系统已经定义了它,所以例如在i386机器上的Free BSD 5上它将是无符号的int,而在ia64机器上它将是一个无符号长整数。 例如,如果您尝试执行类似

的操作
size_t i;
...
char buf[4];
sprintf(buf,"%u",i);

有时它会运行,但在某些平台/编译器上,你会遇到缓冲区溢出。

我的观点是,如果您必须对size_t的大小/类型做出假设,这会导致一些令人讨厌的可移植性问题。

答案 2 :(得分:2)

您可以将size_t用于表示存储在内存中的对象大小的变量。但没有太多理由将它用于其他任何事情。它的存在主要是因为unsigned int可能不够宽以表示内存对象的大小。 (考虑一个具有16位整数但是32位地址空间的架构。)