cout << (i++) << (i++);



  • ist undefinied oder?



  • ich glaub nicht.
    das << ist doch ein überladener operator und müsste als sequenzpunkt gelten...
    🙂



  • warum undefiniert ?

    i=0;
    cout << (i++) << endl << (i++) <<endl;
    cout << 0 <<endl << 1 <<endl;

    definiert.... gib es mal in deinen compiler ein, dann siehst du dass es eine fortlaufende zahl ist



  • sowas wäre undefiniert:

    cout << (i++) + (i++);
    


  • Stelfer schrieb:

    gib es mal in deinen compiler ein, dann siehst du dass es eine fortlaufende zahl ist

    Das sagt genau gar nichts darueber aus, ob etwas undefiniert ist, oder nicht.



  • Hab nur ein seltsamer Fehler:
    cout << obj(x) << obj(x); --> unerwartete Ausgabe
    cout << obj(x); cout << obj(x); --> erwartete Ausgabe

    Ich werde schauen.



  • ten schrieb:

    sowas wäre undefiniert:

    cout << (i++) + (i++);
    

    ja weil i++ an i++ hängt jedoch wenn man es einzeln ausgibt bzw. nicht auf einmal ausrechnet ist es definiert


  • Mod

    Stelfer schrieb:

    ten schrieb:

    sowas wäre undefiniert:

    cout << (i++) + (i++);
    

    ja weil i++ an i++ hängt jedoch wenn man es einzeln ausgibt bzw. nicht auf einmal ausrechnet ist es definiert

    keineswegs. Die mehrfache Veränderung einer Variablen zwischen 2 Sequenzpunkten führt auf jeden Fall zu undefiniertem Verhalten.

    cout << (i++) << endl << (i++) <<endl;
    

    ist auch nichts weiter als

    cout.operator<<(i++).operator<<(endl).operator<<(i++).operator<<(endl);
    

    Seiteneffekte innerhalb der Funktionen haben bei der Rückkehr aus der Funktion stattgefunden (andernfalls wäre ja auch das Verketten von op<< für cout undefiniert). Für i gilt das nur, wenn der operator++ für dieses überladen wurde und es sich somit auch nur um Funktionsaufrufe handelt, aber auch dann ist die Reihenfolge der Inkrementierung unspezifiziert.


Anmelden zum Antworten