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 的字符数组,std::ptrdiff_t
充当 std::size_t 的带符号对应物:它可以存储任何类型的数组的大小,并且在大多数平台上与 std::intptr_t 同义。
std::ptrdiff_t
的声明是否在其他标准库头文件中可用是未指定的。即使标准要求使用 std::ptrdiff_t
,实现也可以避免引入此名称。
[编辑] 可能的实现
// valid since 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) | |
从 标准布局 类型的开头到指定成员的字节偏移量 (函数宏) | |
C 文档 用于 ptrdiff_t
|