Пространства имён
Варианты
Действия

std::size_t

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <cstddef>
Определено в заголовочном файле <cstdio>
Определено в заголовочном файле <cstdlib>
Определено в заголовочном файле <cstring>
Определено в заголовочном файле <ctime>
Определено в заголовочном файле <cuchar>
(начиная с C++17)
Определено в заголовочном файле <cwchar>
typedef /*определено реализацией*/ size_t;

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

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

(начиная с C++11)

Содержание

[править] Примечания

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

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

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

Суффикс целочисленного литерала для std::size_t представляет собой любую комбинацию z или Z с u или U (например, zu, zU, Zu, ZU, uz, uZ, Uz или UZ).

(начиная с C++23)

[править] Пример

#include <cstddef>
#include <iostream>
#include <array>
 
int main()
{
    std::array<std::size_t, 10> a;
 
    // Пример с литералом C++23 size_t
    for (auto i = 0uz; i != a.size(); ++i)
        std::cout << (a[i] = i) << ' ';
    std::cout << '\n';
 
    // Пример декрементирующего цикла
    for (std::size_t i = a.size(); i--;)
        std::cout << a[i] << ' ';
 
    // Обратите внимание на наивный цикл декрементации:
    //  for (std::size_t i = a.size() - 1; i >= 0; --i) ...
    // это бесконечный цикл, потому что числа без знака всегда неотрицательны
}

Вывод:

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)
  • C++17 стандарт (ISO/IEC 14882:2017):
  • 6.9.2 Составные типы [basic.compound](стр. 81-82)
  • 8.3.3 Sizeof [expr.sizeof](стр. 121-122)
  • 8.3.6 Alignof [expr.alignof](стр. 129)
  • 21.2.4 Размеры, выравнивание и смещения [support.types.layout](стр. 479)
  • C++14 стандарт (ISO/IEC 14882:2014):
  • 3.9.2 Составные типы [basic.compound](стр. 73-74)
  • 5.3.3 Sizeof [expr.sizeof](стр. 109-110)
  • 5.3.6 Alignof [expr.alignof](стр. 116)
  • 18.2 Типы [support.types](стр. 443-444)
  • C++11 стандарт (ISO/IEC 14882:2011):
  • 5.3.3 Sizeof [expr.sizeof](стр. 111)
  • 5.3.6 Alignof [expr.alignof](стр. 116)
  • 18.2 Типы [support.types](стр. 454-455)
  • C++03 стандарт (ISO/IEC 14882:2003):
  • 5.3.3 Sizeof [expr.sizeof](стр. 79)
  • C++98 стандарт (ISO/IEC 14882:1998):
  • 5.3.3 Sizeof [expr.sizeof](стр. 77)

[править] Смотрите также

знаковый целочисленный тип, возвращаемый при вычитании двух указателей
(определение типа) [править]
смещение в байтах от начала типа со стандартной компоновкой до указанного элемента
(функция-макрос) [править]
целые литералы
десятичное, восьмеричное или шестнадцатеричное число целых (C++11) типа
Оригинал:
decimal, octal, or hexadecimal numbers of integer type (C++11)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]