std::ptrdiff_t
| 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 |
(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) | |
| Byte-Offset vom Anfang eines Standardlayout-Typs zu einem angegebenen Mitglied (function macro) | |
| C-Dokumentation für
ptrdiff_t | |