std:: ptrdiff_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
|
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
|
(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
|
|