std::ptrdiff_t
| Определено в заголовочном файле <cstddef>
|
||
typedef /*определено реализацией*/ ptrdiff_t; |
||
std::ptrdiff_t это целочисленный тип со знаком, являющийся результатом вычитания двух указателей.
|
Разрядность |
(начиная с C++11) |
Примечание
std::ptrdiff_t используется для арифметики указателей и индексации массива, если возможны отрицательные значения. Программы, использующие другие типы, такие как int, могут не работать, например, на 64-битных системах, когда индекс превышает INT_MAX или если он основан на 32-битной модульной арифметике.
При работе с библиотекой контейнеров C++ правильным типом для различия между итераторами является элемент difference_type, определённый через typedef, который часто является синонимом std::ptrdiff_t.
Только указатели на элементы одного и того же массива (включая указатель, следующий за концом массива) могут вычитаться друг из друга.
Если массив настолько велик (более PTRDIFF_MAX элементов, но меньше SIZE_MAX байт), что разницу между двумя указателями нельзя представить в виде std::ptrdiff_t, результат вычитания двух таких указателей не определён.
Для массивов символов короче PTRDIFF_MAX, 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 (определение типа) | |
| смещение в байтах от начала типа со стандартной компоновкой до указанного элемента (функция-макрос) | |
Документация C по ptrdiff_t
| |