Namespaces
Variants

std:: size_t

From cppreference.net
Utilities library
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 std::size_t ist nicht weniger als 16.

(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 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)

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
  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