std::size_t
| Definiert in Header <cstddef> |
||
| Definiert in Header <cstdio> |
||
| Definiert in Header <cstdlib> |
||
| Definiert in Header <cstring> |
||
| Definiert im Header <ctime> |
||
| Definiert in Header <cuchar> |
(seit C++17) |
|
| Definiert in Header <cwchar> |
||
| typedef /* implementierungsabhängig */ size_t; |
||
std::size_t ist der vorzeichenlose Integer-Typ des Ergebnisses der folgenden Operatoren
| (seit C++11) |
Wenn ein Programm versucht, einen überdimensionierten Typ zu bilden (d.h. die Anzahl der Bytes in seiner Objektdarstellung überschreitet den maximalen Wert, der in std::size_t dargestellt werden kann), ist das Programm fehlerhaft.
|
Die Bitbreite von |
(seit C++11) |
Inhalt |
[bearbeiten] Hinweise
std::size_t kann die maximale Größe eines theoretisch möglichen Objekts eines beliebigen Typs (einschließlich Arrays) speichern. Auf vielen Plattformen (eine Ausnahme bilden Systeme mit segmentierter Adressierung) kann std::size_t sicher den Wert eines beliebigen Nicht-Member-Zeigers speichern, in diesem Fall ist es synonym mit std::uintptr_t.
std::size_t wird häufig für Array-Indizierung und Schleifenzählungen verwendet. Programme, die andere Typen wie unsigned int für die Array-Indizierung verwenden, können auf z.B. 64-Bit-Systemen fehlschlagen, wenn der Index UINT_MAX überschreitet oder wenn er auf 32-Bit-Modulararithmetik angewiesen ist.
Beim Indizieren von C++-Containern wie std::string, std::vector usw. ist der geeignete Typ der von solchen Containern bereitgestellte verschachtelte Typ size_type. Er wird normalerweise als Synonym für std::size_t definiert.
Es ist nicht spezifiziert, ob die Deklaration von std::size_t in anderen Standardbibliotheksheadern verfügbar ist. Eine Implementierung kann vermeiden, diesen Namen einzuführen, auch wenn der Standard die Verwendung von std::size_t vorschreibt.
|
Das Suffix für Ganzzahl-Literale für |
(seit C++23) |
[bearbeiten] Beispiel
#include <array> #include <cstddef> #include <iostream> int main() { std::array<std::size_t, 10> a; // Example with C++23 std::size_t literal for (auto i = 0uz; i != a.size(); ++i) std::cout << (a[i] = i) << ' '; std::cout << '\n'; // Example of decrementing loop for (std::size_t i = a.size(); i--;) std::cout << a[i] << ' '; std::cout << '\n'; // Note the naive decrementing loop: // for (std::size_t i = a.size() - 1; i >= 0; --i) ... // is an infinite loop, because unsigned numbers are always non-negative }
Ausgabe
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| CWG 1122 | C++98 | std::size_t war zirkulär definiert[1] |
es ist implementierungsabhängig |
| CWG 1464 | C++98 | Objektgröße ist möglicherweise nicht in std::size_t darstellbar |
ein solcher Typ ist fehlerhaft |
- ↑ Die Definition von
std::size_twar exakt dieselbe wie die Definition vonsize_tin C, welche „der Ergebnistyp von sizeof“ ist. Es gibt keine zirkuläre Definition in C, da der Ergebnistyp vonsizeofin C ein implementierungsabhängiger vorzeichenloser Ganzzahltyp ist.
[bearbeiten] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 6.8.4 Zusammengesetzte Typen [basic.compound] (S. 79-80)
- 7.6.2.5 Sizeof [expr.sizeof] (S. 136)
- 7.6.2.6 Alignof [expr.alignof] (S. 136)
- 17.2.4 Größen, Ausrichtungen und Offsets [support.types.layout] (S. 504-505)
- C++20 Standard (ISO/IEC 14882:2020)
- 6.8.3 Zusammengesetzte Typen [basic.compound] (S. 75-76)
- 7.6.2.5 Sizeof [expr.sizeof] (S. 129-130)
- 7.6.2.6 Alignof [expr.alignof] (S. 130)
- 17.2.4 Größen, Ausrichtungen und Offsets [support.types.layout] (S. 507-508)
- C++17 Standard (ISO/IEC 14882:2017)
- 6.9.2 Zusammengesetzte Typen [basic.compound] (S. 81-82)
- 8.3.3 Sizeof [expr.sizeof] (S. 121-122)
- 8.3.6 Alignof [expr.alignof] (S. 129)
- 21.2.4 Größen, Ausrichtungen und Offsets [support.types.layout] (S. 479)
- C++14 Standard (ISO/IEC 14882:2014)
- 3.9.2 Zusammengesetzte Typen [basic.compound] (S. 73-74)
- 5.3.3 Sizeof [expr.sizeof] (S. 109-110)
- 5.3.6 Alignof [expr.alignof] (S. 116)
- 18.2 Typen [support.types] (S. 443-444)
- C++11 Standard (ISO/IEC 14882:2011)
- 5.3.3 Sizeof [expr.sizeof] (S. 111)
- 5.3.6 Alignof [expr.alignof] (S. 116)
- 18.2 Typen [support.types] (S. 454-455)
- C++03-Standard (ISO/IEC 14882:2003)
- 5.3.3 Sizeof [expr.sizeof] (S. 79)
- C++98 Standard (ISO/IEC 14882:1998)
- 5.3.3 Sizeof [expr.sizeof] (S. 77)
[bearbeiten] Siehe auch
| vorzeichenbehafteter Ganzzahltyp, der bei der Subtraktion zweier Zeiger zurückgegeben wird (typedef) | |
| Byte-Offset vom Anfang eines Standardlayout-Typs zu einem angegebenen Mitglied (function macro) | |
| Ganzzahl-Literale | binäre,(seit C++14) dezimale, okale oder hexadezimale Zahlen vom Ganzzahltyp |
| C-Dokumentation für size_t
| |