Spec-Zone.ru › C++

std::ptrdiff_t

Определено в заголовке <cstddef>
typedef /*implementation-defined*/ ptrdiff_t;

std::ptrdiff_t — это целочисленный тип со знаком, результатом вычитания двух указателей.

Разрядность std::ptrdiff_t не меньше 17.

(с 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.

Пример

#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

См. также

size_t
целочисленный тип без знака, возвращаемый оператором sizeof
(typedef)
offsetof
байтовый смещение от начала типа стандартного размещения до указанного члена
(макрос-функция)
Документация C для ptrdiff_t

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/ptrdiff_t

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API