C ++,最佳实践,int或size_t?

时间:2010-07-27 05:05:51

标签: c++ performance

  

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

您好。

假设使用模式相同(即没有负数),最好用于各种索引,intsize_t类型?

两者之间在64位Intel上的体验是否存在性能差异?

谢谢

4 个答案:

答案 0 :(得分:11)

size_t是在使用相对泛型数组时应该用于数组索引的类型。即当你只有一个抽象char s,int或其他东西的数组时。

当您使用特定的数组时,即包含特定于您的应用程序的某些元素的数组时,您通常应该已经有一个“选择类型”来计算或索引实体的实体在您的应用程序中键入。这是你应该使用的类型。例如,如果某个数组包含公司员工的记录,那么您的程序中应该已经有一个“选择类型”,用于指定“员工数量”。这是您应该用于索引员工记录数组的类型。它可以是unsigned int,也可以是employee_count_t或类似的东西。为此目的使用裸size_t是设计错误。

另请注意,size_t是一种不是立即用于数组索引的类型。它是一种用于表示程序中最大对象大小的类型。它通过传递性对数组“起作用”:数组是对象,因此size_t总是足以索引数组。但是,在设计程序时,根据通用容器进行思考更有意义,而不是考虑特定的数组。今天它可能是一个数组,明天你可能不得不切换到链表或树。在一般情况下,size_t的范围不足以表示抽象容器中的元素数,这就是为什么在这种情况下size_t不是一个好的选择。

答案 1 :(得分:5)

这取决于你在做什么。如果要迭代向量,则使用std :: size_t:

for (std::size_t i = 0; i < vec.size(); i++) {
   // do something with vec[i]
}

但是,请注意编码错误,例如:

for (std::size_t i = 99; i >= 0; i--) {
   // This is an infinite loop
}

如果您只是在进行循环,那么由于上述情况,您可能只想使用普通的int。使用int和std :: size_t之间应该没有性能差异。如果你需要一个确切的大小,那么你应该既不使用int也不使用size_t,而是使用stdint.h中定义的类型。

答案 2 :(得分:1)

在您暗示的意义上,类型没有区别,通常int是32位,size_t是平台字的宽度(32-64位)。我建议您在处理文件,缓冲区以及可能描述内存区域或缓冲区的任何其他内容时使用size_t

此外,您应该注意int是有符号的,而size_t不是。

最后,历史上使用了int,现在应该使用size_t。但是int仍有用于其他目的。

答案 3 :(得分:1)

size_tptrdiff_tint可能不足以访问数组的所有元素。