std::size_t
定义于头文件 <cstddef>
|
||
定义于头文件 <cstdio>
|
||
定义于头文件 <cstdlib>
|
||
定义于头文件 <cstring>
|
||
定义于头文件 <ctime>
|
||
定义于头文件 <cuchar>
|
(C++17 起) |
|
定义于头文件 <cwchar>
|
||
typedef /*implementation-defined*/ size_t; |
||
std::size_t
是 sizeof 运算符还有 sizeof... 运算符和 alignof 运算符 (C++11 起)所返回的无符号整数类型。
|
(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::string、std::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) | |
从标准布局类型的起始到其指定成员的字节偏移量 (宏函数) |