Maison > développement back-end > C++ > Pourquoi `vector.size() - 1` ne renvoie-t-il pas -1 en C ?

Pourquoi `vector.size() - 1` ne renvoie-t-il pas -1 en C ?

Susan Sarandon
Libérer: 2024-12-02 19:21:11
original
364 Les gens l'ont consulté

Why Doesn't `vector.size() - 1` Return -1 in C  ?

Anomalies de taille de vecteur en C

En C , la méthode size() du conteneur vectoriel renvoie le nombre d'éléments dans le vecteur. Cependant, un comportement déroutant survient lorsque le vecteur est vide, comme le démontre l'extrait de code suivant :

#include <vector>
#include <iostream>

using namespace std;

int main() {
    vector<int> value;

    cout << value.size() << endl;  // Output: 0
    cout << value.size() - 1 << endl;  // Output: 18446744073709551615
}
Copier après la connexion

Pourquoi la deuxième sortie n'est-elle pas -1 ?

Le la première instruction cout imprime correctement 0, indiquant que le vecteur est vide. Cependant, la deuxième déclaration produit étonnamment un très grand nombre positif, et non le -1 attendu. Cela se produit car vector::size() renvoie un entier non signé de type size_t. Les entiers non signés, comme leur nom l'indique, ne peuvent pas représenter de nombres négatifs.

Par conséquent, lorsqu'une valeur size_t est soustraite d'elle-même, elle revient essentiellement au nombre maximum représentable pour ce type. Dans ce cas, size_t est généralement un entier de 64 bits, donc la valeur maximale qu'il peut contenir est 18446744073709551615. Cette valeur est ce qui est imprimé comme sortie de la deuxième instruction cout.

Que se passe-t-il pendant le Deuxième cout ?

La séquence de calculs suivante explique le comportement derrière le deuxième cout :

  1. value.size() renvoie 0, un entier non signé de type size_t.
  2. value.size() - 1 calcule 0 - 1, ce qui donne 18446744073709551615 (le nombre maximum représentable pour size_t).
  3. impressions cout cette valeur maximale est 18446744073709551615.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal