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
|