Heim > Backend-Entwicklung > C++ > Warum ist die Ausgabe eines C-Programms mit in cout verwendeten Post-Inkrement-Operatoren undefiniert?

Warum ist die Ausgabe eines C-Programms mit in cout verwendeten Post-Inkrement-Operatoren undefiniert?

Barbara Streisand
Freigeben: 2024-11-06 08:23:02
Original
330 Leute haben es durchsucht

Why is the output of a C   program with post-increment operators used in cout undefined?

Undefiniertes Verhalten von Post-Inkrement in C

In C erhöht der Post-Inkrement-Operator (i) den Wert einer Variablen um 1 nach seiner Bewertung. Bei Verwendung in Kombination mit dem Einfügeoperator (<<) in cout wird die Reihenfolge der Operationen entscheidend.

Programm 1

Beachten Sie den folgenden Codeausschnitt:

<code class="cpp">#include <iostream>
using namespace std;

main(){
    int i = 5;
    cout << i++ << i-- << ++i << --i << i << endl;
}</p>
<p>Die Ausgabe dieses Programms ist undefiniert. Gemäß dem C-Standard ist das Verhalten undefiniert, wenn ein Nebeneffekt auf ein Skalarobjekt (z. B. i) relativ zu einem anderen Nebeneffekt oder einer Wertberechnung, die dasselbe Objekt verwendet, nicht sequenziert ist.</p>
<p><strong>Erklärung: </strong></p>
<p>Der Ausdruck cout << ich << i-- <<   ich << --i << i entspricht der folgenden Operationsfolge:</p>
<ol>
<li>i: erhöht i auf 6 und gibt 5 zurück.</li>
<li>i--: verringert i auf 5.</li>
<li> i: erhöht i auf 6.</li>
<li>--i: dekrementiert i auf 5.</li>
<li>i: gibt 5 zurück.</li>
</ol>
<p>Der Standard definiert jedoch nicht die Reihenfolge, in der diese Nebenwirkungen auftreten. Das bedeutet, dass der Compiler sie in beliebiger Reihenfolge ausführen kann, was möglicherweise bei jeder Programmausführung zu einer anderen Ausgabe führt. In diesem speziellen Fall lautet die Ausgabe „55555“, da die Nebenwirkungen in der oben aufgeführten Reihenfolge ausgeführt werden.</p>
<p><strong>Programm 2</strong></p>
<p>Das folgende Programm zeigt ebenfalls undefiniertes Verhalten :</p>
<pre class="brush:php;toolbar:false"><code class="cpp">int x = 20, y = 35;
x = y++ + y + x++ + y++;
cout << x << endl << y;</code>
Nach dem Login kopieren

Die erwartete Ausgabe dieses Programms beträgt 126 und 37. Aufgrund undefinierten Verhaltens kann die tatsächliche Ausgabe jedoch je nach Compiler-Implementierung variieren.

Moral von die Geschichte:

Es ist unbedingt zu vermeiden, Post-Inkrement in Kombination mit Cout oder anderen Operationen zu verwenden, die auf den Nebenwirkungen des Inkrements beruhen. Verwenden Sie stattdessen separate Zeilen zum Ändern und Drucken der Variablen, um ein vorhersehbares Verhalten sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum ist die Ausgabe eines C-Programms mit in cout verwendeten Post-Inkrement-Operatoren undefiniert?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage