c++ - Diferencia entre size_t y std:: size_t
size-t (3)
¿Cuáles son las diferencias entre size_t
y std::size_t
en términos de dónde se declaran, cuándo se deben usar y otras características diferenciadoras?
C''s size_t
y C ++ '' std::size_t
son los mismos.
En C, se define en <stddef.h>
y en C ++, se define en <cstddef>
cuyos contenidos son los mismos que en el encabezado C (consulte la cita a continuación). Se define como un tipo entero sin signo del resultado del operador sizeof .
C Standard dice en §17.7 / 2,
size_t, que es el tipo entero sin signo del resultado del operador sizeof
Y C ++ Standard dice (sobre el encabezado cstddef
) en §18.1 / 3,
El contenido es el mismo que el encabezado de la biblioteca estándar C, con los siguientes cambios .
Así que sí, ambos son iguales; la única diferencia es que C ++ define size_t
en el std
nombres std
.
Tenga en cuenta también que la línea anterior también dice "con los siguientes cambios" que no se refiere a size_t
. Se refiere más bien a las nuevas adiciones (en su mayoría) hechas por C ++ en el lenguaje (no presente en C) que también se definen en el mismo encabezado.
Wikipedia tiene muy buena información sobre el rango y el tamaño de almacenamiento de size_t:
Rango y tamaño de almacenamiento de size_t
El tipo real de size_t depende de la plataforma ; un error común es suponer que size_t es lo mismo que unsigned int, lo que puede conducir a errores de programación, [3] [4] cuando se mueve desde la arquitectura de 32 a 64 bits, por ejemplo.
De acuerdo con el estándar ISO C de 1999 (C99), size_t es un tipo entero sin signo de al menos 16 bits.
Y el resto se puede leer desde esta página en wikipedia.
De C ++ 03 "17.4.3.1.4 Tipos":
Para cada tipo T de la biblioteca Standard C (nota al pie 169), los tipos :: T y std :: T están reservados a la implementación y, cuando se definen, :: T será idéntico a std :: T.
Y la nota al pie 169:
Estos tipos son clock_t, div_t, FILE, fpos_t, lconv, ldiv_t, mbstate_t, ptrdiff_t, sig_atomic_t, size_t, time_t, tm, va_list, wctrans_t, wctype_t y wint_t.
std :: size_t es de hecho stddef.h ''s size_t .
cstddef da lo siguiente:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}
... llevando efectivamente la definición anterior al espacio de nombres estándar.