La justification de la nature non signée de size_t
La mise en garde de Bjarne Stroustrup contre l'utilisation d'entiers non signés pour représenter des valeurs positives a déclenché un débat sur l'aspect pratique de size_t comme type de données non signé.
Historiquement, size_t a été conçu sur des architectures 16 bits où limiter les chaînes à 32 Ko serait déraisonnable. Pour résoudre ce problème, la norme C a exigé que ptrdiff_t (l'homologue signé de size_t) fonctionne efficacement dans les 17 bits, une exigence qui peut toujours être pertinente dans les systèmes embarqués.
Cependant, pour les systèmes 32 bits et 64 bits modernes plates-formes bit, la justification d'unsigned size_t devient discutable en raison des malheureuses règles de conversion implicites de C/C. Les types non signés deviennent une source d'erreurs lorsqu'ils sont utilisés pour des opérations numériques, car les valeurs négatives sont interprétées comme de grandes valeurs positives.
Cela a conduit des experts comme Scott Meyers à recommander d'éviter les entiers non signés dans les interfaces, quelle que soit la valeur attendue. plage de valeurs. Le simple fait d'utiliser typedef int MyType peut éliminer ce problème sans nuire à la lisibilité du code.
En résumé, le choix de size_t non signé a été fait dans le contexte des premières contraintes architecturales. Bien que cela ait pu être approprié à l'époque, cela est sans doute moins pratique dans les environnements de programmation modernes où les règles de conversion implicites présentent un risque d'erreurs important.
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!