Anomalie de taille de vecteur : pourquoi Size() - 1 n'est pas -1 pour les vecteurs vides
L'extrait de code donné démontre un comportement particulier dans Vecteurs C. Lorsqu'un vecteur est vide (c'est-à-dire size() == 0), soustraire 1 de sa taille renvoie un grand nombre positif au lieu du -1 attendu.
La cause
La clé pour comprendre ce comportement réside dans le type de données vector::size(). Il est défini comme size_t, un type entier non signé. Contrairement aux entiers signés, les entiers non signés ne peuvent pas représenter des valeurs négatives.
Le deuxième cout : que se passe-t-il ?
Lorsque vous soustrayez 1 de la taille d'un vecteur vide (qui est 0) , le résultat déborde et revient à la plus grande valeur possible pour un entier non signé. En effet, les entiers non signés utilisent tous leurs bits pour représenter des valeurs positives, et lorsqu'ils débordent, ils recommencent à 0.
Exemple
Dans l'exemple de code, valeur .size() vaut 0 et value.size() - 1 déborde vers 18446744073709551615, qui est le valeur maximale pour un entier non signé de 64 bits (2 ^ 64 - 1).
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!