std:: size_t
|
Definiert im Header
<cstddef>
|
||
|
Definiert im Header
<cstdio>
|
||
|
Definiert im Header
<cstdlib>
|
||
|
Definiert im Header
<cstring>
|
||
|
Definiert im Header
<ctime>
|
||
|
Definiert im Header
<cuchar>
|
(seit C++17)
|
|
|
Definiert im Header
<cwchar>
|
||
|
typedef
/* implementation-defined */
size_t
;
|
||
std::size_t
ist der vorzeichenlose Ganzzahltyp 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
den maximalen in
std::size_t
darstellbaren Wert überschreitet), ist das Programm fehlerhaft.
|
Die Bitbreite von
|
(since C++11) |
Inhaltsverzeichnis |
Hinweise
std::size_t
kann die maximale Größe eines theoretisch möglichen Objekts beliebigen Typs (einschließlich Arrays) speichern. Auf vielen Plattformen (eine Ausnahme sind Systeme mit segmentierter Adressierung) kann
std::size_t
sicher den Wert jedes Nicht-Member-Zeigers speichern, in welchem Fall es synonym mit
std::uintptr_t
ist.
std::size_t
wird häufig für Array-Indizierung und Schleifenzählung verwendet. Programme, die andere Typen wie
unsigned
int
für die Array-Indizierung verwenden, können beispielsweise auf 64-Bit-Systemen fehlschlagen, wenn der Index
UINT_MAX
überschreitet oder wenn er von 32-Bit-modularer Arithmetik abhängt.
Beim Indizieren von C++-Containern, wie
std::string
,
std::vector
, etc., ist der geeignete Typ der verschachtelte Typ
size_type
, der von solchen Containern bereitgestellt wird. Er ist üblicherweise als Synonym für
std::size_t
definiert.
Es ist nicht spezifiziert, ob die Deklaration von
std::size_t
in anderen Standardbibliothek-Headern verfügbar ist. Eine Implementierung kann vermeiden, diesen Namen einzuführen, selbst wenn der Standard die Verwendung von
std::size_t
vorschreibt.
|
Das
Ganzzahlliteral-Suffix
für
|
(since C++23) |
Mögliche Implementierung
using size_t = decltype ( sizeof 0 ) ;
Beispiel
#include <array> #include <cstddef> #include <iostream> int main() { std::array<std::size_t, 10> a; // Beispiel mit C++23 std::size_t Literal for (auto i = 0uz; i != a.size(); ++i) std::cout << (a[i] = i) << ' '; std::cout << '\n'; // Beispiel einer absteigenden Schleife for (std::size_t i = a.size(); i--;) std::cout << a[i] << ' '; std::cout << '\n'; // Beachten Sie, dass die naive absteigende Schleife: // for (std::size_t i = a.size() - 1; i >= 0; --i) ... // eine Endlosschleife ist, weil vorzeichenlose Zahlen immer nicht-negativ sind }
Ausgabe:
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| CWG 1122 | C++98 |
std::size_t
war zirkulär definiert
[1]
|
es ist implementierungsdefiniert |
| CWG 1464 | C++98 |
Objektgröße könnte nicht in
std::size_t
darstellbar sein
|
solch ein 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 implementierungsdefinierter vorzeichenloser Ganzzahltyp ist.
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)
Siehe auch
|
Vorzeichenbehafteter Ganzzahltyp, der bei der Subtraktion zweier Zeiger zurückgegeben wird
(typedef) |
|
|
Byte-Offset vom Beginn eines
Standard-Layout
-Typs zum angegebenen Member
(Funktionsmakro) |
|
| Ganzzahlliterale | binär, (seit C++14) dezimale, oktale oder hexadezimale Zahlen des Ganzzahltyps |
|
C-Dokumentation
für
size_t
|
|