Heim > Backend-Entwicklung > C++ > Warum läuft diese Schleife über und erzeugt eine unerwartete Ausgabe?

Warum läuft diese Schleife über und erzeugt eine unerwartete Ausgabe?

DDD
Freigeben: 2024-12-02 18:11:19
Original
295 Leute haben es durchsucht

Why Does This Loop Overflow and Produce Unexpected Output?

Warum erzeugt diese Schleife „Warnung: Iteration 3u ruft undefiniertes Verhalten auf“ und gibt mehr als 4 Zeilen aus?

Der fragliche Code:

#include <iostream>

int main()
{
    for (int i = 0; i < 4; ++i)
        std::cout << i * 1000000000 << std::endl;
}
Nach dem Login kopieren

erzeugt die folgende Warnung:

warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
   std::cout << i * 1000000000 << std::endl;
                  ^
Nach dem Login kopieren

Dies Die Warnung ergibt sich aus einem vorzeichenbehafteten Ganzzahlüberlauf, der in der Anweisung auftritt:

i * 1000000000
Nach dem Login kopieren

Die Multiplikation von i (einem int-Datentyp) mit 1000000000 führt zu einem Ganzzahlüberlauf, da 1000000000 zu groß ist, um in den Bereich von zu passen eine int-Variable. Folglich wird der Wert von i undefiniert und alle nachfolgenden Operationen an i (z. B. die Ausgabe an die Konsole) können zu unerwarteten Ergebnissen führen.

In diesem speziellen Fall iteriert die Schleife weiter und erzeugt eine Ausgabe, die über die beabsichtigte hinausgeht vier Iterationen, da die Schleifenbedingung i < 4 wird als wahr ausgewertet. Aufgrund des Ganzzahlüberlaufs ist der i-Wert jedoch beschädigt und die Schleife wird weiter iteriert, bis der Ausgabepuffer voll ist.

Um dieses Problem zu beheben, müssen Sie entweder die Beendigungsbedingung der Schleife anpassen, um dies zu berücksichtigen den Überlauf oder verwenden Sie einen ganzzahligen Datentyp, der breit genug ist, um das Ergebnis der Multiplikation zu verarbeiten.

Das obige ist der detaillierte Inhalt vonWarum läuft diese Schleife über und erzeugt eine unerwartete Ausgabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage