C++ 参考手册

定义于头文件 <cstddef>
定义于头文件 <cstdio>
定义于头文件 <cstdlib>
定义于头文件 <cstring>
定义于头文件 <ctime>
定义于头文件 <cuchar>
(C++17 起)
定义于头文件 <cwchar>
typedef /*implementation-defined*/ size_t;

std::size_tsizeof 运算符还有 sizeof... 运算符和 alignof 运算符 (C++11 起)所返回的无符号整数类型。

std::size_t 的位宽不小于 16 。

(C++11 起)

注解

std::size_t 可以存放下理论上可能存在的对象的最大大小,该对象可以是任何类型,包括数组。大小无法以 std::size_t 表示的类型是非良构的。 (C++14 起)在许多平台上(使用分段寻址的系统除外),std::size_t 可以存放下任何非成员的指针,此时可以视作其与 std::uintptr_t 同义。

std::size_t 通常被用于数组索引和循环计数。使用其它类型来进行数组索引操作的程序可能会在某些情况下出错,例如在 64 位系统中使用 unsigned int 进行索引时,如果索引号超过 UINT_MAX 或者依赖于 32 位取模运算的话,程序就会出错。

在对诸如 std::stringstd::vector 等 C++ 容器进行索引操作时,正确的类型是该容器的成员 typedef size_type,而该类型通常被定义为与 std::size_t 相同。

示例

#include <cstddef>
#include <iostream>
 
int main()
{
    const std::size_t N = 10;
    int* a = new int[N];
 
    for (std::size_t n = 0; n < N; ++n)
        a[n] = n;
    for (std::size_t n = N; n-- > 0;) // 对于无符号类型的逆向循环技巧。
        std::cout << a[n] << " ";
 
    delete[] a;
}

输出:

9 8 7 6 5 4 3 2 1 0

参阅

在两个指针相减时返回的有符号整数类型
(typedef)
从标准布局类型的起始到其指定成员的字节偏移量
(宏函数)