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?
Réponses
Trop de publicités?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.
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.