std::ptrdiff_t
来自cppreference.com
| 在标头 <cstddef> 定义
|
||
| |
||
std::ptrdiff_t 是两个指针相减结果的有符号整数类型。
|
|
(C++11 起) |
注解
std::ptrdiff_t 被用于指针算术及数组下标,如果允许出现负值。程序使用如 int 的其他类型,当索引超过 INT_MAX 或依赖 32 位模算术时,可能在 64 位系统失败。
在使用 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。
未指定 std::ptrdiff_t 的声明是否在任何其他标准库头文件中可用。即使当标准要求使用 std::ptrdiff_t 时,实现仍可避免引入此名字。
可能的实现
// C++11 起合法
using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr));
|
示例
运行此代码
#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) << ' ';
std::cout << '\n';
delete[] a;
}
输出:
10 9 8 7 6 5 4 3 2 1
参阅
| sizeof 运算符返回的无符号整数类型 (typedef) | |
| 从标准布局类型的起始到其指定成员的字节偏移量 (宏函数) | |
ptrdiff_t 的 C 文档
| |