std:: ptrdiff_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
|
定义于头文件
<cstddef>
|
||
|
typedef
/*由实现定义*/
ptrdiff_t
;
|
||
std::ptrdiff_t
是表示两个指针相减结果的有符号整数类型。
|
|
(since C++11) |
目录 |
注释
std::ptrdiff_t
用于
指针算术
和数组索引(当可能存在负值时)。若程序使用其他类型(如
int
),在索引超过
INT_MAX
或依赖32位模运算时,可能在64位系统上运行失败。
在使用C++容器库时,迭代器差值对应的正确类型是成员类型定义
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
,实现也可以避免引入该名称。
可能的实现
// 自 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
|
|