std::size_t

来自cppreference.com
< cpp‎ | types
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
类型支持
基本类型
定宽整数类型 (C++11)
定宽浮点类型 (C++23)
size_t
(C++17)
数值极限
C 数值极限接口
运行时类型信息
 
在标头 <cstddef> 定义
在标头 <cstdio> 定义
在标头 <cstdlib> 定义
在标头 <cstring> 定义
在标头 <ctime> 定义
在标头 <cuchar> 定义
(C++17 起)
在标头 <cwchar> 定义
typedef /* 由实现定义 */ size_t;

std::size_tsizeof 运算符,还有 sizeof... 运算符及 alignof 运算符 (C++11 起)的结果所拥有的无符号整数类型。

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

(C++11 起)

注解

std::size_t 可以存放下理论上可能存在的对象的最大大小,该对象可以是任何类型(包括数组)。大小无法以 std::size_t 表示的类型是非良构的。在许多平台上(使用分段寻址的系统除外),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 相同。

std::size_t整数字面量后缀zZuU 的任何组合(即 zuzUZuZUuzuZUzUZ)。

(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 页)
  • C++03 标准(ISO/IEC 14882:2003):
  • 5.3.3 Sizeof [expr.sizeof](第 79 页)
  • C++98 标准(ISO/IEC 14882:1998):
  • 5.3.3 Sizeof [expr.sizeof](第 77 页)

参阅

在两个指针相减时返回的有符号整数类型
(typedef)
从标准布局类型的起始到其指定成员的字节偏移量
(宏函数)
整数字面量 整数类型的二进制、 (C++14 起)十进制、八进制或十六进制数