Je suis tellement confus à propos de size_t
. J'ai cherché sur Internet et partout mentionné que size_t
est un type non signé et ne peut donc représenter que des valeurs non négatives.
Ma première question est la suivante: s’il est utilisé pour représenter uniquement des valeurs non négatives, pourquoi ne pas utiliser unsigned int
au lieu de size_t
?
Ma deuxième question est: are size_t
et unsigned int
interchangeable ou non? Si non, alors pourquoi?
Et quelqu'un peut-il me donner un bon exemple de size_t
et brièvement son fonctionnement?
si c'est utilisé pour représenter une valeur non négative alors pourquoi ne pas utiliser
unsigned int
au lieu desize_t
Parce que unsigned int
N'est pas le seul type entier non signé. size_t
Peut être n'importe lequel des éléments suivants: unsigned char
, unsigned short
, unsigned int
, unsigned long
Ou unsigned long long
, Selon l'implémentation.
La deuxième question est que
size_t
Etunsigned int
Sont interchangeables ou non et si non, pourquoi?
Ils ne sont pas interchangeables, pour la raison expliquée ci-dessus ^^
.
Et est-ce que quelqu'un peut me donner un bon exemple de taille et de son bref travail?
Je ne comprends pas très bien ce que vous entendez par "son bref travail". Cela fonctionne comme n'importe quel autre type non signé (en particulier, comme le type dans lequel il est typé). Nous vous encourageons à utiliser size_t
Lorsque vous décrivez la taille d'un objet. En particulier, l'opérateur sizeof
et diverses fonctions de bibliothèque standard, telles que strlen()
, renvoient size_t
.
Bonus: voici un bon article environ size_t
(Et le type ptrdiff_t
Étroitement lié). C'est une très bonne raison pour laquelle vous devriez l'utiliser.
Il existe 5 types d'entiers standard non signés en C:
unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
avec différentes exigences pour leurs tailles et leurs gammes (brièvement, la gamme de chaque type est un sous-ensemble de la gamme du type suivant, mais certains d'entre eux peuvent avoir la même gamme).
size_t
est un typedef
(c'est-à-dire un alias) pour un type non signé (probablement l'un des types précédents mais peut-être un type entier étendu non signé, bien que cela soit peu probable). C'est le type fourni par l'opérateur sizeof
.
Sur un système, il pourrait être judicieux d’utiliser unsigned int
pour représenter les tailles; sur un autre, il serait peut-être plus logique d'utiliser unsigned long
ou unsigned long long
. (size_t
_ est peu probable que ce soit unsigned char
ou unsigned short
, mais c'est autorisé).
Le but de size_t
est de soulager le programmeur de son souci de lequel des types prédéfinis est utilisé pour représenter les tailles.
Le code qui suppose que sizeof
donne un unsigned int
ne serait pas portable. Code qui suppose qu'il donne un size_t
est plus susceptible d'être portable.
size_t
a une restriction spécifique.
Citant de http://www.cplusplus.com/reference/cstring/size_t/ :
Alias de l'un des types entiers fondamentaux non signés.
C'est un type capable de représenter la taille de tout objet en octets : size_t est le type renvoyé par l'opérateur sizeof et est largement utilisé dans la bibliothèque standard pour représenter les tailles et les comptes.
Il n'est pas interchangeable avec unsigned int
parce que la taille de int
est spécifiée par le modèle de données. Par exemple, LLP64 utilise un int
32 bits et ILP64 utilise un int
64 bits.
size_t est utilisé pour stocker la taille des objets de données et il est garanti qu'il est capable de contenir la taille de tout objet de données que l'implémentation C particulière peut créer. Ce type de données peut être plus petit (en nombre de bits), plus grand ou identique à unsigned int.
En plus des autres réponses, il documente également le code et dit aux gens que vous parlez de la taille des objets en mémoire.
type_taille est un type entier de base non signé du langage C/C++. C'est le type du résultat renvoyé par l'opérateur sizeof. La taille du type est choisie de manière à pouvoir stocker la taille maximale d'un tableau théoriquement possible de tout type. Sur un système 32 bits, size_t prendra 32 bits, sur un 64 bits, un 64 bits. En d'autres termes, une variable de type size_t peut stocker en toute sécurité un pointeur. L'exception concerne les pointeurs vers les fonctions de classe, mais il s'agit d'un cas particulier. Bien que size_t puisse stocker un pointeur, il est préférable d'utiliser un autre type d'entier non signé uintptr_t à cette fin (son nom reflète sa capacité). Les types size_t et uintptr_t sont des synonymes. Le type size_t est généralement utilisé pour les compteurs de boucles, l'indexation de tableaux et l'arithmétique d'adresses. La valeur maximale possible du type size_t est la constante SIZE_MAX.
En termes simples, size_t dépend de la plate-forme et de l'implémentation, alors que unsigned int dépend uniquement de la plate-forme.