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

Any*_*orn 7 c++ performance

可能重复:
何时使用std :: size_t?

你好.

假设使用模式相同(即没有负数),最好用于各种索引,int或者size_t输入?

两者之间64位英特尔的体验是否存在性能差异?

谢谢

AnT*_*AnT 12

size_t是使用相对通用的数组时应该用于数组索引的类型.即,当你只有一系列抽象的chars,ints或其他东西时.

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

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

  • @AndreyT,如果明天它可能是一个链表或树,那么任何类型的索引都是不好的.为此,您需要迭代器. (2认同)

Mic*_*yan 5

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

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

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

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

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

  • 你正在迭代`std :: vector <>`(或任何其他标准容器)你可能想要使用`std :: vector <> :: size_type`而不是直接快捷到`std :: size_t`. (2认同)

Mat*_*ner 1

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

此外,您应该注意 int 有符号,而 size_t 没有。

最后,int历史上使用过的地方size_t现在应该使用。然而,int它本身对于其他目的仍然有用。