Anomalien der Vektorgröße in C
In C gibt die Methode size() des Vektorcontainers die Anzahl der Elemente im Vektor zurück. Allerdings tritt verwirrendes Verhalten auf, wenn der Vektor leer ist, wie im folgenden Codeausschnitt gezeigt:
#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 }
Warum ist die zweite Ausgabe nicht -1?
Die Die erste cout-Anweisung gibt korrekt 0 aus, was darauf hinweist, dass der Vektor leer ist. Allerdings gibt die zweite Anweisung überraschenderweise eine sehr große positive Zahl aus, nicht die erwartete -1. Dies liegt daran, dass vector::size() eine vorzeichenlose Ganzzahl vom Typ size_t zurückgibt. Ganzzahlen ohne Vorzeichen können, wie der Name schon sagt, keine negativen Zahlen darstellen.
Wenn daher ein size_t-Wert von sich selbst subtrahiert wird, geht er im Wesentlichen auf die maximal darstellbare Zahl für diesen Typ zurück. In diesem Fall ist size_t normalerweise eine 64-Bit-Ganzzahl, sodass der maximale Wert, den es enthalten kann, 18446744073709551615 ist. Dieser Wert wird als Ausgabe der zweiten Cout-Anweisung gedruckt.
Was passiert während der Zweiter Cout?
Die folgende Berechnungsfolge erklärt das Verhalten dahinter zweiter cout:
Das obige ist der detaillierte Inhalt vonWarum gibt „vector.size() - 1' in C nicht -1 zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!