std::size_t
| Definido en el archivo de encabezado <cstddef>
|
||
| Definido en el archivo de encabezado <cstdio>
|
||
| Definido en el archivo de encabezado <cstdlib>
|
||
| Definido en el archivo de encabezado <cstring>
|
||
| Definido en el archivo de encabezado <ctime>
|
||
| Definido en el archivo de encabezado <cuchar>
|
(desde C++17) |
|
| Definido en el archivo de encabezado <cwchar>
|
||
typedef /* definido por la implementación */ size_t; |
||
std::size_t es el tipo entero sin signo del resultado de los siguientes operadores:
| (desde C++11) |
Si un programa intenta formar un tipo de gran tamaño (es decir, la cantidad de bytes en su representación de objeto excede el valor máximo representable en std::size_t), el programa está mal formado.
|
La anchura de bits de |
(desde C++11) |
Notas
std::size_t puede almacenar el tamaño máximo de un objeto teóricamente posible de cualquier tipo (incluyendo array). En muchas plataformas (una excepción son los sistemas con direccionamiento segmentado) std::size_t puede almacenar de manera segura el valor de cualquier puntero no miembro, en cuyo caso es sinónimo de std::uintptr_t.
std::size_t se utiliza comúnmente para la indexación de arrays y el conteo en bucles. Los programas que utilizan otros tipos, como por ejemplo unsigned int, para la indexación de arrays pueden fallar en, por ejemplo, sistemas de 64 bits cuando el subíndice sobrepasa UINT_MAX o si se basa en aritmética modular de 32 bits.
Al indexar los contenedores de C++, tales como std::string, std::vector, etc., el tipo adecuado es la definición de tipo miembro size_type proporcionada por dichos contenedores. Por lo general se define como sinónimo de std::size_t.
No se especifica si la declaración de std::size_t está disponible en cualquier otro encabezado de la biblioteca estándar. Una implementación puede evitar introducir este nombre incluso cuando el estándar requiere que se use std::size_t.
|
El sufijo de literal entero para |
(desde C++23) |
Ejemplo
#include <array>
#include <cstddef>
#include <iostream>
int main()
{
std::array<std::size_t, 10> a;
// Ejemplo con el literal std::size_t de C++23
for (auto i = 0uz; i != a.size(); ++i)
std::cout << (a[i] = i) << ' ';
std::cout << '\n';
// Ejemplo de un bucle decrementador
for (std::size_t i = a.size(); i--;)
std::cout << a[i] << ' ';
std::cout << '\n';
// Observa una manera ingenua de implementar un bucle decrementador:
// for (std::size_t i = a.size() - 1; i >= 0; --i) ...
// es un bucle infinito, porque los números sin signo siempre son no negativos
}
Salida:
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| CWG 1122 | C++98 | std::size_t se definía de forma circular.[1]
|
Está definido por la implementación. |
| CWG 1464 | C++98 | El tamaño del objeto podría no ser representable en std::size_t.
|
Ese tipo está mal formado. |
Referencias
- El estándar C++23 (ISO/IEC 14882:2023):
- 6.8.4 Compound types [basic.compound](p: 79-80)
- 7.6.2.5 Sizeof [expr.sizeof](p: 136)
- 7.6.2.6 Alignof [expr.alignof](p: 136)
- 17.2.4 Sizes, alignments, and offsets [support.types.layout](p: 504-505)
- El estándar C++20 (ISO/IEC 14882:2020):
- 6.8.3 Compound types [basic.compound](p: 75-76)
- 7.6.2.5 Sizeof [expr.sizeof](p: 129-130)
- 7.6.2.6 Alignof [expr.alignof](p: 130)
- 17.2.4 Sizes, alignments, and offsets [support.types.layout](p: 507-508)
- El estándar C++17 (ISO/IEC 14882:2017):
- 6.9.2 Compound types [basic.compound](p: 81-82)
- 8.3.3 Sizeof [expr.sizeof](p: 121-122)
- 8.3.6 Alignof [expr.alignof](p: 129)
- 21.2.4 Sizes, alignments, and offsets [support.types.layout](p: 479)
- El estándar C++14 (ISO/IEC 14882:2014):
- 3.9.2 Compound types [basic.compound](p: 73-74)
- 5.3.3 Sizeof [expr.sizeof](p: 109-110)
- 5.3.6 Alignof [expr.alignof](p: 116)
- 18.2 Types [support.types](p: 443-444)
- El estándar C++11 (ISO/IEC 14882:2011):
- 5.3.3 Sizeof [expr.sizeof](p: 111)
- 5.3.6 Alignof [expr.alignof](p: 116)
- 18.2 Types [support.types](p: 454-455)
- El estándar C++03 (ISO/IEC 14882:2003):
- 5.3.3 Sizeof [expr.sizeof](p: 79)
- El estándar C++98 (ISO/IEC 14882:1998):
- 5.3.3 Sizeof [expr.sizeof](p: 77)
Véase también
| Tipo entero con signo devuelto al restar dos punteros. (typedef) | |
| Desplazamiento de bytes desde el comienzo de un tipo de diseño estándar al miembro especificado. (macro de función) | |
| literales enteros | binario, (desde C++14) decimal, octal o números hexadecimales de tipo entero. |
Documentación de C para size_t
| |