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