C++ 参考手册

定义于头文件 <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 = 100;
    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;
}


参阅

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