std::size_t
来自cppreference.com
在标头 <cstddef> 定义
|
||
在标头 <cstdio> 定义
|
||
在标头 <cstdlib> 定义
|
||
在标头 <cstring> 定义
|
||
在标头 <ctime> 定义
|
||
在标头 <cuchar> 定义
|
(C++17 起) |
|
在标头 <cwchar> 定义
|
||
typedef /* 由实现定义 */ size_t; |
||
std::size_t
是 sizeof 运算符,还有 sizeof... 运算符及 alignof 运算符 (C++11 起)的结果所拥有的无符号整数类型。
|
(C++11 起) |
注解
std::size_t
可以存放下理论上可能存在的对象的最大大小,该对象可以是任何类型(包括数组)。大小无法以 std::size_t
表示的类型是非良构的。在许多平台上(使用分段寻址的系统除外),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
相同。
|
(C++23 起) |
示例
运行此代码
#include <cstddef> #include <iostream> #include <array> int main() { std::array<std::size_t, 10> a; // 使用 C++23 size_t 字面量的例子 for (auto i = 0uz; i != a.size(); ++i) std::cout << (a[i] = i) << ' '; std::cout << '\n'; // 自减循环的例子 for (std::size_t i = a.size(); i--;) std::cout << a[i] << ' '; // 注意以下自减循环的简单实现: // for (std::size_t i = a.size() - 1; i >= 0; --i) ... // 是无限循环,因为无符号数不会是负数 }
输出:
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0
引用
- C++20 标准(ISO/IEC 14882:2020):
- 6.8.3 Compound types [basic.compound](第 75-76 页)
- 7.6.2.5 Sizeof [expr.sizeof](第 129-130 页)
- 7.6.2.6 Alignof [expr.alignof](第 130 页)
- 17.2.4 Sizes, alignments, and offsets [support.types.layout](第 507-508 页)
- C++17 标准(ISO/IEC 14882:2017):
- 6.9.2 Compound types [basic.compound](第 81-82 页)
- 8.3.3 Sizeof [expr.sizeof](第 121-122 页)
- 8.3.6 Alignof [expr.alignof](第 129 页)
- 21.2.4 Sizes, alignments, and offsets [support.types.layout](第 479 页)
- C++14 标准(ISO/IEC 14882:2014):
- 3.9.2 Compound types [basic.compound](第 73-74 页)
- 5.3.3 Sizeof [expr.sizeof](第 109-110 页)
- 5.3.6 Alignof [expr.alignof](第 116 页)
- 18.2 Types [support.types](第 443-444 页)
- C++11 标准(ISO/IEC 14882:2011):
- 5.3.3 Sizeof [expr.sizeof](第 111 页)
- 5.3.6 Alignof [expr.alignof](第 116 页)
- 18.2 Types [support.types](第 454-455 页)