Maison >développement back-end >C++ >Pourquoi `size_t` n'est-il pas signé dans C/C : une nécessité historique ou un aimant à bugs moderne ?

Pourquoi `size_t` n'est-il pas signé dans C/C : une nécessité historique ou un aimant à bugs moderne ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 07:39:30289parcourir

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

Pourquoi size_t est-il non signé ?

L'observation de Bjarne Stroustrup selon laquelle "utiliser unsigned au lieu d'un int pour gagner un bit de plus pour représenter des entiers positifs n'est presque jamais une bonne idée" a soulevé des inquiétudes quant à la décision de rendre size_t non signé.

Origines historiques

À l'origine, size_t a été rendu non signé pour s'adapter aux architectures avec des pointeurs 16 bits, telles que les systèmes DOS. Pour éviter les limitations de taille de chaîne, la norme C exigeait que ptrdiff_t, la contrepartie signée de size_t, soit effectivement de 17 bits.

Pertinence actuelle

Bien que ces raisons historiques puissent toujours être applicables dans les systèmes embarqués, ils le sont moins pour la programmation moderne 32 bits et 64 bits. Dans ces environnements, il n'y a aucun avantage pratique à utiliser des types non signés pour les nombres, et leur utilisation peut introduire des bogues potentiels dus aux règles de conversion implicites C/C (par exemple, où string("Hi").length() < -3) .

Conclusion

La décision de rendre size_t non signé n'était pas une erreur, mais plutôt un choix pratique pour les systèmes limités de l'époque. Cependant, dans les pratiques de programmation modernes, il est généralement conseillé de minimiser l'utilisation d'entiers non signés dans les interfaces et pour les nombres, sauf dans des circonstances spécifiques où la nature autodescriptive de typedef int MyType est bénéfique.

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