Spec-Zone.ru › C++

std::size_t

Определено в заголовке <cstddef>
Определено в заголовке <cstdio>
Определено в заголовке <cstdlib>
Определено в заголовке <cstring>
Определено в заголовке <ctime>
Определено в заголовке <cuchar> (с C++17)
Определено в заголовке <cwchar>
typedef /*implementation-defined*/ size_t;

std::size_t — это целое беззнаковое число, результат применения оператора sizeof, а также оператора sizeof... и оператора alignof (с C++11).

Разрядность std::size_t не меньше 16.

(с C++11)

Примечания

std::size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массив). Тип, размер которого не может быть представлен std::size_t — некорректен. На многих платформах (исключение — системы с сегментированной адресацией) std::size_t может безопасно хранить значение любого не-членного указателя, в этом случае он синонимичен std::uintptr_t.

std::size_t обычно используется для индексации массивов и подсчёта циклов. Программы, использующие другие типы, такие как unsigned int, для индексации массивов, могут завершиться неудачно на, например, 64-битных системах, когда индекс превышает UINT_MAX или если он полагается на 32-битную модулярную арифметику.

При индексации контейнеров C++, таких как std::string, std::vector и т. п., следует использовать соответствующий тип-псевдоним size_type, предоставляемый этими контейнерами. Обычно он определён как синоним для std::size_t.

Приставка для целочисленных литералов std::size_t — любая комбинация z или Z с u или U (т. е. zu, zU, Zu, ZU, uz, uZ, Uz или UZ).

(с C++23)

Пример

#include <array>
#include <cstddef>
#include <iostream>
 
int main()
{
    std::array<std::size_t, 10> a;
 
    // Example with C++23 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
}

Вывод:

0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2023):
    • 6.8.4 Составные типы [basic.compound] (с. 79-80)
    • 7.6.2.5 Sizeof [expr.sizeof] (с. 136)
    • 7.6.2.6 Alignof [expr.alignof] (с. 136)
    • 17.2.4 Размеры, выравнивания и смещения [support.types.layout] (с. 504-505)
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 6.8.3 Составные типы [basic.compound] (с. 75-76)
    • 7.6.2.5 Sizeof [expr.sizeof] (с. 129-130)
    • 7.6.2.6 Alignof [expr.alignof] (с. 130)
    • 17.2.4 Размеры, выравнивания и смещения [support.types.layout] (с. 507-508)

См. также

ptrdiff_t
Целый тип со знаком, возвращаемый при вычитании двух указателей
(typedef)
offsetof
Смещение в байтах от начала типа стандартного размера до указанного члена
(функция-макрос)
целочисленные литералы двоичные,(с C++14) десятичные, восьмеричные или шестнадцатеричные числа целочисленного типа
C документация для size_t

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/size_t

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API