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
Linda Hamiltonoriginal
2024-10-28 09:24:29593parcourir

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!

Déclaration:
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