std::ptrdiff_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++17)
(C++17)
栈踪
 
类型支持
基本类型
基础类型
定宽整数类型 (C++11)
ptrdiff_t
(C++17)
数值极限
C 数值极限接口
运行时类型信息
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20 前)
(C++11)(C++20 中弃用)
(C++11)
类型特性常量
元函数
(C++17)
常量求值语境
受支持操作
关系与属性查询
类型修改
(C++11)(C++11)(C++11)
类型变换
(C++11)
(C++11)
(C++17)
(C++11)(C++20 前)(C++17)
 
定义于头文件 <cstddef>
typedef /*implementation-defined*/ ptrdiff_t;

std::ptrdiff_t 是二个指针相减结果的有符号整数类型。

std::ptrdiff_t 的位宽不小于 17 。

(C++11 起)

注解

std::ptrdiff_t 被用于指针算术及数组下标,若负值可行。使用其他类型,如 int 的程序,可能诸如 64 位的系统上失败,在当下标超过 INT_MAX 或依赖 32 位模算术时。

在用 C++ 容器库工作时,迭代器的差的准确类型是成员 typedef difference_type ,它常与 std::ptrdiff_t 相同。

只有指向同一数组元素的指针(含指向数组结尾后一位置的指针)可以相减。

若数组过大(大于 PTRDIFF_MAX 个元素,而小于 SIZE_MAX 字节),则二个指针的差可能无法以 std::ptrdiff_t 表示,二个这种指针相减的结果是未定义的。

对于短于 PTRDIFF_MAX 的 char 数组, std::ptrdiff_t 表现为 std::size_t 的有符号对应物:它可以存储数组的大小,而且在多数平台上等同于 std::intptr_t

示例

#include <cstddef>
#include <iostream>
int main()
{
    const std::size_t N = 10;
    int* a = new int[N];
    int* end = a + N;
    for (std::ptrdiff_t i = N; i > 0; --i)
        std::cout << (*(end - i) = i) << ' ';
    delete[] a;
}

输出:

10 9 8 7 6 5 4 3 2 1

参阅

sizeof 运算符返回的无符号整数类型
(typedef)
从标准布局类型的起始到其指定成员的字节偏移量
(宏函数)