我只是想知道我是否应该使用std::size_t for循环之类的东西,而不是int? 例如:

#include <cstdint>

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        // std::size_t OK here? Or should I use, say, unsigned int instead?
    }
}

一般来说,关于何时使用std::size_t的最佳实践是什么?


当前回答

Size_t是一个无符号整型,它可以表示系统中最大的整数。 只有当你需要非常大的数组,矩阵等。

有些函数返回size_t,如果你试图进行比较,编译器会警告你。

通过使用适当的有符号/无符号数据类型或简单的类型转换来避免快速破解。

其他回答

Size_t是sizeof操作符的结果类型。

size_t用于对数组的大小或索引进行建模的变量。Size_t传达语义:您立即知道它表示字节或索引的大小,而不仅仅是另一个整数。

此外,使用size_t表示字节大小有助于使代码可移植。

Size_t是unsigned int。所以当你需要unsigned int时,你可以使用它。

我使用它当我想指定数组的大小,计数器等…

void * operator new (size_t size); is a good use of it.

size_t是一种无符号类型,它可以为您的体系结构保存最大整数值,因此它不会因为符号(有符号int 0x7FFFFFFF加1会得到-1)或短大小(无符号短int 0xFFFF加1会得到0)而导致整数溢出。

它主要用于数组索引/循环/地址算法等。像memset()这样的函数只接受size_t,因为理论上你可能有一个大小为2^32-1的内存块(在32位平台上)。

对于这样简单的循环,不要麻烦,只使用int。

很快,大多数计算机将是64位体系结构,带有64位操作系统,运行在数十亿个元素的容器上的程序。然后必须使用size_t而不是int作为循环索引,否则在32位和64位系统上,索引将在2^32:th元素处换行。

为未来做好准备!

根据定义,size_t是sizeof操作符的结果。创建Size_t是为了引用大小。

你做某事的次数(在你的例子中是10次)与大小无关,那么为什么要使用size_t呢?Int,或者unsigned Int,应该是可以的。

当然,你在循环中对i做什么也是相关的。例如,如果将它传递给一个接受无符号整型的函数,则选择无符号整型。

在任何情况下,我都建议避免隐式类型转换。使所有类型转换显式。