Namensräume
Varianten
Aktionen

std::ptrdiff_t

Von cppreference.com
< cpp‎ | types
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in Header <cstddef>
typedef /*implementierungsabhängig*/ ptrdiff_t;

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

Die Bitbreite von std::ptrdiff_t beträgt nicht weniger als 17.

(seit C++11)

Inhalt

[bearbeiten] Hinweise

std::ptrdiff_t wird für die Zeigerarithmetik und Array-Indizierung verwendet, wenn negative Werte möglich sind. Programme, die andere Typen wie int verwenden, können auf z.B. 64-Bit-Systemen fehlschlagen, wenn der Index INT_MAX überschreitet oder wenn sie sich auf 32-Bit-Modulararithmetik verlassen.

Bei der Arbeit mit der C++-Containerbibliothek ist der richtige 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 hinter dem Ende des Arrays) dürfen voneinander subtrahiert werden.

Wenn ein Array so groß ist (größer als PTRDIFF_MAX Elemente, aber kleiner als SIZE_MAX Bytes), dass die Differenz zweier Zeiger nicht als std::ptrdiff_t darstellbar ist, ist das Ergebnis der Subtraktion zweier solcher Zeiger undefiniert.

Für Zeichen-Arrays, die kürzer als PTRDIFF_MAX sind, fungiert std::ptrdiff_t 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 Standardbibliotheksheadern verfügbar ist. Eine Implementierung kann vermeiden, diesen Namen einzuführen, auch wenn der Standard die Verwendung von std::ptrdiff_t vorschreibt.

[bearbeiten] Mögliche Implementierung

// valid since C++11
using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr));

[bearbeiten] 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

[bearbeiten] Siehe auch

nicht vorzeichenbehafteter Ganzzahltyp, der vom sizeof-Operator zurückgegeben wird
(typedef) [bearbeiten]
Byte-Offset vom Anfang eines Standardlayout-Typs zu einem angegebenen Mitglied
(function macro) [bearbeiten]
C-Dokumentation für ptrdiff_t