Namespaces
Variants

std::size_t

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programmdienstprogramme
Variadische Funktionen
Koroutinenunterstü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 Dienstprogramme
Relationsoperatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabeltypen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <cstddef>
Definiert in Header <cstdio>
Definiert in Header <cstdlib>
Definiert in Header <cstring>
Definiert in Header <ctime>
Definiert in Header <cuchar>
(seit C++17)
Definiert in 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 übermäßig großen Typ zu bilden (d.h. die Anzahl der Bytes in seiner Objektdarstellung den maximalen Wert überschreitet, der in std::size_t darstellbar ist), ist das Programm fehlerhaft.

Die Bitbreite von std::size_t beträgt nicht weniger als 16.

(seit C++11)

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 std::size_t ist jede Kombination von z oder Z mit u oder U (d.h. zu , zU , Zu , ZU , uz , uZ , Uz , oder UZ ).

(since C++23)

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
  1. Die Definition von std::size_t war exakt dieselbe wie die Definition von size_t in C, welche "der Ergebnistyp von sizeof " ist. Es gibt keine zirkuläre Definition in C, da der Ergebnistyp von sizeof in 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