std::ptrdiff_t
来自cppreference.com
在标头 <cstddef> 定义
|
||
typedef /*implementation-defined*/ ptrdiff_t; |
||
std::ptrdiff_t
是二个指针相减结果的有符号整数类型。
|
(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) | |
从标准布局类型的起始到其指定成员的字节偏移量 (宏函数) |