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).
|
Разрядность |
(с 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.
|
Приставка для целочисленных литералов |
(с 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)
См. также
| Целый тип со знаком, возвращаемый при вычитании двух указателей (typedef) |
|
| Смещение в байтах от начала типа стандартного размера до указанного члена (функция-макрос) |
|
| целочисленные литералы | двоичные,(с 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