可能重复:
何时使用std :: size_t?
你好.
假设使用模式相同(即没有负数),最好用于各种索引,int
或者size_t
输入?
两者之间64位英特尔的体验是否存在性能差异?
谢谢
AnT*_*AnT 12
size_t
是使用相对通用的数组时应该用于数组索引的类型.即,当你只有一系列抽象的char
s,int
s或其他东西时.
当您使用特定数组(即包含特定于您的应用程序的某些元素的数组)时,您通常应该有一个"选择类型"来计算或索引应用程序中该类型的实体.这是你应该使用的类型.例如,如果某个数组包含公司员工的记录,那么您的程序中应该已经有一个"选择类型",用于指定"员工数量".这是您应该用于索引员工记录数组的类型.它可能是unsigned int
,它可能是employee_count_t
或类似的东西.size_t
为此目的使用裸体是一个设计错误.
另请注意,这size_t
是一种不是立即用于数组索引的类型.它是一种用于表示程序中最大对象大小的类型.它通过传递性对数组"起作用":数组是对象,因此size_t
总是足以索引数组.但是,在设计程序时,根据通用容器进行思考更有意义,而不是根据特定数组进行思考.今天它可能是一个数组,明天你可能不得不切换到链表或树.在一般情况下,范围size_t
不足以表示抽象容器中的元素数量,这就是为什么size_t
在这种情况下不是一个好的选择.
这取决于你在做什么.如果要迭代向量,则使用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中定义的类型.
这些类型在您所暗示的意义上没有什么不同,通常int
是 32 位,并且size_t
是平台字的宽度(32-64 位)。我建议您size_t
在处理文件、缓冲区以及任何其他可能描述内存区域或缓冲区的内容时使用。
此外,您应该注意 int 有符号,而 size_t 没有。
最后,int
历史上使用过的地方size_t
现在应该使用。然而,int
它本身对于其他目的仍然有用。
归档时间: |
|
查看次数: |
8768 次 |
最近记录: |