Maison > développement back-end > C++ > Pourquoi `size_t` n'est-il pas signé malgré les inconvénients connus ?

Pourquoi `size_t` n'est-il pas signé malgré les inconvénients connus ?

Linda Hamilton
Libérer: 2024-10-28 09:24:29
original
591 Les gens l'ont consulté

Why is `size_t` Unsigned Despite the Known Drawbacks?

Pourquoi size_t est-il non signé ?

Question :

Dans son livre, Bjarne Stroustrup conseille contre l'utilisation d'entiers non signés pour gagner un bit supplémentaire pour représenter des entiers positifs. Cependant, size_t, un type couramment utilisé pour représenter les tailles de tableaux et de chaînes, n'est pas signé. Était-ce une erreur et l'utilisation de size_t devrait-elle être minimisée ?

Réponse :

size_t n'est pas signé pour des raisons historiques :

Limitations architecturales :

Sur les architectures plus anciennes avec des pointeurs 16 bits, limiter les chaînes à 32 Ko serait peu pratique. Pour résoudre ce problème, la norme C exige que ptrdiff_t, l'homologue signé de size_t, ait une plage effective de 17 bits.

Systèmes embarqués :

Dans certaines programmations embarquées environnements, ces raisons historiques sont toujours vraies.

Inconvénients des types non signés :

Cependant, dans la programmation moderne 32 bits et 64 bits, les types non signés présentent des inconvénients importants :

  • Règles de conversion implicites : Les règles de conversion implicites de C et C traitent les types non signés comme des attracteurs de bogues, car elles autorisent des opérations et des comparaisons qui peuvent produire des résultats inattendus (par exemple, une chaîne ("Salut").length() < -3).

Conclusion :

La décision de rendre size_t non signé n'était pas une erreur compte tenu du limites architecturales de l'époque. Cependant, dans la pratique de programmation moderne, l'utilisation de types non signés pour les opérations numériques est fortement déconseillée en raison de leurs inconvénients inhérents.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal