148 votes

Où puis-je trouver la définition d'un size_t?

Je vois les variables définies avec ce type mais je ne sais pas d'où il vient, ni quel est son but. Pourquoi ne pas utiliser des int ou unsigned int? (Quels sont les autres "semblables"? Void_t, etc).

142voto

Martin Liversage Points 43712

À Partir De Wikipedia

L' stdlib.h et stddef.h fichiers d'en-tête de définir un type de données appelé size_t1 qui est utilisé pour représenter la taille d'un objet. Bibliothèque de fonctions qui prennent des tailles s'attendre à être de type size_t, et l'opérateur sizeof renvoie la valeur size_t.

Le type réel de l' 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,[2] en particulier que les architectures 64 bits deviennent de plus en plus répandus.

45voto

stefanB Points 27796

Selon size_t description sur en.cppreference.com size_t est défini dans les en-têtes suivants :

std::size_t

...    

Defined in header <cstddef>         
Defined in header <cstdio>      
Defined in header <cstring>         
Defined in header <ctime>       
Defined in header <cwchar>

29voto

fpmurphy1 Points 851

size_t est du type entier non signé du résultat de l'opérateur sizeof (ISO C99 Section 7.17.)

L' sizeof opérateur rendements de la taille (en octets) de son opérande, qui peut être un l'expression ou la mise entre parenthèses du nom d'un type. La taille est déterminée par le type de l'opérande. Le résultat est un entier. La valeur du résultat est la mise en œuvre définis, et son type (unsigned integer) size_t (ISO C99 Section 6.5.3.4.)

6voto

Matt Price Points 9674

Pratiquement parlant, size_t représente le nombre d'octets que vous pouvez aborder. Sur la plupart des architectures modernes pour les 10 à 15 dernières années a été de 32 bits, qui a également été de la taille d'un unsigned int. Cependant, nous nous dirigeons à l'adressage 64 bits alors que l' uint aura plus de chances de rester en 32bits (c'est la taille n'est pas garanti dans la norme c++). Afin de rendre votre code qui dépend de la taille de la mémoire portable à travers les architectures, vous devez utiliser un size_t. Par exemple des choses comme la taille des matrices devriez toujours utiliser size_t'. Si vous regardez les conteneurs standard de l' ::size() retourne toujours un size_t.

A noter également, visual studio dispose d'une option de compilation qui permet de vérifier pour ces types d'erreurs appelé "Détecter 64 bits des Problèmes de Portabilité".

2voto

lavinio Points 12592

De cette façon, vous savez toujours quelle est la taille, parce qu'un type spécifique est dédié aux tailles. La question très propre montre qu'il peut être une question: est-il un int ou unsigned int? Aussi, quelle est l'ampleur (short, int, long, etc.)?

Car il y a un type spécifique attribué, vous n'avez pas à vous soucier de la longueur ou de la signature de l'-ness.

La définition peut être trouvée dans la Référence C++ de la Bibliothèque, qui dit:

Type: size_t (Unsigned intégrale)

En-tête: <cstring>

size_t correspond à l'intégrale type de données renvoyé par la langue de l'opérateur sizeof et est défini dans l' <cstring> fichier d'en-tête (entre autres) comme un unsigned type intégral.

En <cstring>, il est utilisé comme le type du paramètre num dans les fonctions memchr, memcmp, memcpy, memmove, memset, strncat, strncmp, strncpy et strxfrm, ce qui dans tous les cas, il est utilisé pour spécifier le nombre maximal d'octets ou de caractères que la fonction a pour incidence sur.

Il est également utilisé comme type de retour pour strcspn, strlen, strspn et strxfrm de retour de tailles et de longueurs.

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