Prendre la suite de la norme passage:
[C++11: 5.3.3/6]:
Le résultat d'sizeof
etsizeof...
est une constante de typestd::size_t
. [ Note:std::size_t
est défini dans la norme en-tête<cstddef>
(18.2). -la note de fin ]
Maintenant:
[C++11: 18.2/6]:
Typesize_t
est une mise en œuvre définies par type entier non signé qui est assez grand pour contenir la taille en octets d'un objet quelconque.
Accordé, le passage n'exige pas l' size_t
est un alias de type défini avec typedef
, mais puisqu'il est explicitement indiqué par la norme en-tête <cstddef>
, je pense que nous pouvons prendre comme lu que de ne pas inclure <cstddef>
devrait supprimer toute garantie que l' size_t
doit être disponible pour un programme.
Toutefois, selon cette première citation, nous pouvons indépendamment obtenir une expression de type std::size_t
.
On peut en fait démontrer ces deux faits:
int main()
{
typedef decltype(sizeof(0)) my_size_t;
my_size_t x = 0; // OK
std::size_t y = 1; // error: 'size_t' is not a member of 'std'
}
std::size_t
n'est pas visible pour le programme, mais sizeof(0)
nous donne encore un? Vraiment?
Est-il donc pas correct de dire qu' 5.3.3/6
est imparfait, et qu'il a effectivement "du même type que ce que std::size_t
décide de", mais pas std::size_t
lui-même?
Bien sûr, les deux sont une seule et même si std::size_t
est un alias de type, mais, encore une fois, cela est réellement nécessaire.