2016-05-20 4 views
-4

Was ist die Ausführungsstrategie, die die C++ - Laufzeit verwendet, um die Ausgabe 4545 zu erzeugen, wenn der unten angegebene Code ausgeführt wird.Wie werden die Prä- und Post-Inkrement/Dekrement-Operatoren in C++ ausgewertet, wenn sie wiederholt in einer einzigen Cout-Anweisung vorkommen?

#include <iostream> 
using namespace std; 
int main() 
{ 
    int a=5; 
    cout  <<a++  <<++a  <<a--  <<--a; 
} 

erwartete ich die Ausgabe 5444

Bitte helfen Sie mir zu verstehen, wie die C++ Runtime-Code verarbeitet.

+3

Es ist undefiniertes Verhalten. –

+2

Ist dies Teil eines indischen Schullehrplans oder so? Warum sehen wir das fast jeden Tag? –

+2

Ihr Programm ruft UB auf. Alles kann passieren. Compiler kann alles tun. Es könnte Ihre Festplatte formatieren, Ihre Freundin schwanger machen, was auch immer sie mag !!! – Destructor

Antwort

0

Die C++ - Laufzeit behandelt das gesamte Programm aber es mag, weil Ihr Programm undefiniertes Verhalten hat.

Fügen Sie keine Inkrement/Dekrement-Operationen wie diese zusammen.

Das wurde SO tausendmal gesagt!

Übrigens "führt" die C++ - Laufzeit Ihr Programm nicht aus; Das ist nicht Java. Ihre CPU führt Ihr Programm aus. Die C++ - Laufzeit ist nur dazu da, um Bibliotheken bereitzustellen und was nicht, um diese Ausführung zu unterstützen.

+0

@Destructor: Das ist kein Duplikat. –

+0

Es ist genaues Duplikat. Es spielt keine Rolle, ob Sie es glauben oder nicht. – Destructor

+0

@Destructor: Es ist offensichtlich kein exaktes Duplikat. Führen Sie einen Textvergleich oder öffnen Sie Ihre Augen, je nachdem, was für Sie funktioniert. Als eine Nebenbemerkung, gehen herum zu denken, dass die Eingabe anderer Menschen "ist nicht wichtig" ist keine gute Möglichkeit, Ihr Leben zu leben. –

Verwandte Themen