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 обычно используется для индексации массивов и счётчиков циклов. Программы, которые используют другие типы, например unsigned int, для индексации массивов, могут неправильно работать на, например, 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_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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Документация C по size_t
|