c++ size-t

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.