124 votes

Différence entre size_t et std :: size_t

Quelles sont les différences entre size_t et std :: size_t en ce qui concerne l'endroit où elles sont déclarées, le moment où elles doivent être utilisées et toutes autres caractéristiques différenciantes?

81voto

Nawaz Points 148870

C size_t et C++' std::size_t sont à la fois même.

En C, il est défini en <stddef.h> et en C++, il est défini en <cstddef> dont le contenu est le même que d'en-tête C (voir la citation ci-dessous). Il est défini comme type entier non signé de la suite de la sizeof opérateur.

C Standard est dit au §17.7/2,

size_t qui est le type entier non signé de la suite de la sizeof opérateur

Et C++ Standard dit (à propos de cstddef d'en-tête) dans le §18.1/3,

Le contenu est le même que la bibliothèque Standard C en-tête , avec les modifications suivantes.

Donc oui, les deux sont de même; la seule diffference est que le C++ définit size_t en std d'espace de noms.

Veuillez également noter que la ligne ci-dessus dit aussi "avec les modifications suivantes" , ce qui n'est pas en se référant à l' size_t. Son plutôt se référant à la nouvelle ajouts (pour la plupart) faite par C++ dans la langue (pas présent dans C), qui sont également définis dans le même en-tête.


Wikipédia a de très bonnes infos sur la gamme et la taille de stockage du size_t:

Gamme et la taille de stockage du size_t

La réelle type size_t est dépend de la plateforme; une erreur commune est de supposer size_t est le même que unsigned int, ce qui peut conduire à des erreurs de programmation,[3][4] lors du déplacement de de 32 à architecture 64 bits, pour exemple.

Selon l'1999 ISO C standard (C99), size_t est un type unsigned type entier d'au moins 16 bits.

Et le reste, vous pouvez lire cette page sur wikipédia.

17voto

Michael Burr Points 181287

A partir de C ++ 03 "Types 17.4.3.1.4":

Pour chaque type T de la bibliothèque Standard C (note de bas de page 169), les types :: T et std :: T sont réservés à l'implémentation et, lorsqu'ils sont définis, :: T doit être identique à std :: T.

Et note de bas de page 169:

Ces types sont 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 et wint_t.

12voto

hifier Points 262

std :: size_t est en fait le size_t de stddef.h. cstddef donne ce qui suit:

 #include <stddef.h>
namespace std 
{
  using ::ptrdiff_t;
  using ::size_t;
}
 

... apportant effectivement la définition précédente dans l'espace de noms std.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X