*iterator++



  • Was passiert da denn genau eigentlich? Ich check dass ned, vorallem warum sowas überhaupt geht.

    vector<string> temp;
    temp.push_back("Boing");
    temp.push_back("Dolo-Dobendan");
    temp.push_back("Depp");
    temp.push_back("Computer");
    vector<string>::iterator iter = temp.begin();
    cout << *iter++ << endl; //Warum geht das? Bzw. was wird da eigl. gemacht?
    

    "*" hat doch eine höhere Priorität als "++" oder? Also kommt dass als erstes dran. -> "*iter" so jetzt ist ganz normal der string "boing" da -> wird nun mit "++" inkrementiert. ABER: Man kann doch gar keine Strings inkrementieren oder?
    Weil dass hier geht bei mir z.B. ned:

    string a = "Marmelade";
    cout << a++ << endl;
    

    Oder hab ich irgendwie einen Denkfehler? (Meine ganze Verwirrtheit ist auf eine Übung aus dem C++ Primer [5.19] zurückzuführen)

    MfG
    Stromberg



  • mh
    wenn ders compiled was wird denn dann ausgegeben?



  • Alternativ

    *iter = *iter + 1;
    


  • @Skym0sh0
    Es wird ganz normal "Boing" ausgegeben, so als ob er das "++" gar nich beachten würde.

    Versteht jemand was der da macht? Bzw. warum das möglich ist, und keinen Error gibt?

    MfG
    Stromberg



  • Der * - Operator hat eine höhere Priorität, ist allerdings rechtsbindend..

    Das bedeutet in dem Fall hier, dass das so ausgewerter wird:

    *(iter++)
    

    Und da du hier postinkrement benutzt, ist der Wert von iter++ immernoch begin.

    Wenn du preinkrement machst, hast du das nächste Element..



  • @alle
    Wo steht eigentlich, dass der *-Operator höhere Priorität als die jeweiligen Inkrement/Dekrement-Operatoren hat?



  • Kritiker schrieb:

    @alle
    Wo steht eigentlich, dass der *-Operator höhere Priorität als die jeweiligen Inkrement/Dekrement-Operatoren hat?

    Hat er doch gar nicht? 😕



  • Confusiert schrieb:

    Kritiker schrieb:

    @alle
    Wo steht eigentlich, dass der *-Operator höhere Priorität als die jeweiligen Inkrement/Dekrement-Operatoren hat?

    Hat er doch gar nicht? 😕

    Stimmt. Ich habe mich da vertan..



  • Stromberg schrieb:

    "*" hat doch eine höhere Priorität als "++" oder?

    drakon schrieb:

    Der * - Operator hat eine höhere Priorität, ist allerdings rechtsbindend..

    @Confusiert
    Ist deine Konfusion auf den Operator bezogen, oder auf meine Behauptung? Weiß jetzt nicht was du meinst.



  • Es würde übrigens auch nicht durch einen String iteriert, so wie im Beispiel von dir, sondern durch einen Vektor der Strings enthält. Ob der Strings, Integer oder was anderes enthält ist egal. Es wird durch einen Container iteriert der Daten enthält.

    string a = "Marmelade";
    cout << a++ << endl;

    Dieses Beispiel ist natürlich Unsinn. Wo soll der denn als nächstes hin springen?
    Du kannst einzelne Elemente (Zeichen) des Strings ansprechen, sowohl das auch anders funktioniert. Doch die Variable a ist der komplette String, und die sprichst du an mit cout << a. Danach weiß weder der Compiler, noch du oder ich wohin es danach gehen sollte.

    *iter zeigt auf den Anfang (.begin) und das wird an cout übergeben, dann wird Inkrementiert. Probiere das mal mit einer Hilfsvariable.



  • Scheppertreiber schrieb:

    Alternativ

    *iter = *iter + 1;
    

    Sicher???


Anmelden zum Antworten