std::size_t
Определено в заголовочном файле <cstddef> | ||
Определено в заголовочном файле <cstdio> | ||
Определено в заголовочном файле <cstdlib> | ||
Определено в заголовочном файле <cstring> | ||
Определено в заголовочном файле <ctime> | ||
Определено в заголовочном файле <cuchar> | (начиная с C++17) | |
Определено в заголовочном файле <cwchar> | ||
typedef/*определено реализацией*/ size_t; | ||
std::size_t
целочисленный тип без знака, являющийся результатом оператора sizeof, а также операторов sizeof... и alignof(начиная с C++11).
Разрядность | (начиная с C++11) |
Содержание |
[править]Примечания
size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массивы). Тип, размер которого не может быть представлен std::size_t
, имеет неправильный формат. На большинстве платформ (за исключением систем с адресацией по сегментам) size_t может безопасно хранить значение любого указателя, кроме указателей на элементы классов, таким образом, являясь синонимом std::uintptr_t.
std::size_t обычно используется для индексации массивов и счётчиков циклов. Программы, которые используют другие типы, например unsignedint, для индексации массивов, могут неправильно работать на, например, 64-битных системах, когда индекс превзойдет UINT_MAX или если он основан на 32-битной модульной арифметике.
При индексации C++ контейнеров, таких как std::string, std::vector, и т.д. для индекса используется соответствующий тип, объявленный через typedef size_type в типе контейнера. Обычно этот тип определён как синоним std::size_t.
Суффикс целочисленного литерала для | (начиная с C++23) |
[править]Пример
#include <cstddef>#include <iostream>#include <array> int main(){std::array<std::size_t, 10> a; // Пример с литералом C++23 size_tfor(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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Документация C по size_t |