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 ?
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é.
À 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.
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) .
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!