Namespaces
Variants

std:: ptrdiff_t

From cppreference.net
Utilities library
Definiert im Header <cstddef>
typedef /*implementation-defined*/ ptrdiff_t ;

std::ptrdiff_t ist der vorzeichenbehaftete Ganzzahltyp des Ergebnisses der Subtraktion zweier Zeiger.

Die Bitbreite von std::ptrdiff_t beträgt mindestens 17.

(since C++11)

Inhaltsverzeichnis

Hinweise

std::ptrdiff_t wird für Pointer-Arithmetik und Array-Indizierung verwendet, wenn negative Werte möglich sind. Programme, die andere Typen wie int verwenden, können beispielsweise auf 64-Bit-Systemen fehlschlagen, wenn der Index INT_MAX überschreitet oder wenn sie auf 32-Bit-modularer Arithmetik basieren.

Bei der Arbeit mit der C++-Containerbibliothek ist der korrekte Typ für die Differenz zwischen Iteratoren der Member-Typedef difference_type , der oft synonym mit std::ptrdiff_t ist.

Nur Zeiger auf Elemente desselben Arrays (einschließlich des Zeigers eins hinter dem Ende des Arrays) dürfen voneinander subtrahiert werden.

Wenn ein Array so groß ist (mehr als PTRDIFF_MAX Elemente, aber weniger als SIZE_MAX Bytes), dass die Differenz zwischen zwei Zeigern nicht als std::ptrdiff_t dargestellt werden kann, ist das Ergebnis der Subtraktion zweier solcher Zeiger undefiniert.

Für char-Arrays kürzer als PTRDIFF_MAX , std::ptrdiff_t fungiert als das vorzeichenbehaftete Gegenstück zu std::size_t : Es kann die Größe des Arrays jedes Typs speichern und ist auf den meisten Plattformen synonym mit std::intptr_t .

Es ist nicht spezifiziert, ob die Deklaration von std::ptrdiff_t in anderen Standardbibliothek-Headern verfügbar ist. Eine Implementierung kann vermeiden, diesen Namen einzuführen, selbst wenn der Standard die Verwendung von std::ptrdiff_t vorschreibt.

Mögliche Implementierung

// gültig seit C++11
using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr));

Beispiel

#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;
}

Ausgabe:

10 9 8 7 6 5 4 3 2 1

Siehe auch

Vom sizeof -Operator zurückgegebener vorzeichenloser Ganzzahltyp
(Typedef)
Byte-Offset vom Anfang eines Standard-Layout-Typs zum angegebenen Mitglied
(Funktionsmakro)
C-Dokumentation für ptrdiff_t