i++ funktion oder grundrechenoperation?



  • Ist eine Operation und genauer eine Incrementierung... noch mehr Namen fallen mir nicht ein.



  • Post-Inkrement-Operator.



  • kommt ganz auf die Sichtweise an und darauf was man unter Operation und Funktion versteht.
    Aus Sicht der Syntax ist es in jedem Fall eine Operation, also der Aufruf des Inkrementoperators.
    Andererseits kann man in Abhängigkeit vom Datentyp sagen, dass es eine Operation für eingebaute Datentypen ist, jedoch eine Funktion für Klassen, da es sich bei letzterer um den Aufruf der Funktion "operator++" dieser Klasse handelt - von der C++-Semantik her kann man den op++ für eingebaute Datentypen nicht in einzelne Operationen unterteilen, für die überladenen op++ von Klassen indes schon.
    Aus Sicht von Threads/Parallelität etc. ist i++ für keinen Datentyp eine atomare Operation und muss daher bei Daten die zwischen mehreren Threads geteilt werden durch entsprechende Mechanismen geschützt werden. In dem Kontext könnte man es also als Funktion, bestehend aus mehreren Operationen verstehen.



  • Gustl schrieb:

    Hi,

    sagt mal wie wird zb.: i++ genannt? ist das eine Funktion oder nur eine"rechnung"?

    Gruß Gustl

    Was ist denn i ?

    Gruß,

    Simon2.



  • Danke euch, allerdings hab ich nicht ganz verstanden was pumuckel da geschrieben hat, einmal ist es keine funktion dann wieder doch? kk

    ist ja auch nicht sooo wichtig...

    @simon2
    i steht hier für eine Laufvariable, in einer schleife zb.

    Gruß Gustl



  • Gustl schrieb:

    ...
    @simon2
    i steht hier für eine Laufvariable, in einer schleife zb....

    Ich wollte auf Folgendes hinaus (und pumuckl wohl auch):

    struct meineKlasse {
       int b;
       meineKlasse(int d) :  b(d) {}
       int operator++(int) { cout << "Hallo\n"; return b++; }
    };
    
    int main() {
    
       {
          int i(0);
          i++; // (1)
       }
    
       {
          meineKlasse i(0);
          i++;   // (2)
       }
       return 0;
    }
    

    In beiden Fällen steht da "i++" ... doch einmal würdest Du vermutlich von "Rechnung"/"Operation"/... und das andere mal wohl eher von "Funktion".

    Ergo: Was passiert, ist von Typ abhängig.

    Ergo: Ob man das "Funktion" oder "Grundrechenoperation" nennt, ist so nicht zu beantworten,
    - ohne den Typ zu kennen oder
    - ohne definiert zu haben, was man mit den beiden Begriffen meint.

    Gruß,

    Simon2.



  • "i++;" ist ein "Statement".
    Genaugenommen ein "Expression Statement".

    Siehe z.B. hier:
    http://msdn.microsoft.com/en-us/library/s7ytfs2k(VS.80).aspx

    EDIT: oops. 🙂 "i++" war gefragt, also ohne ";" hinten dran. Und das is einfach eine "Expression". Zu Deutsch auch oft als "Ausdruck" bezeichnet.



  • Wenn schon pingelig dann richtig: Das ist ein Buchstabe gefolgt von zwei Zeichen, die auf den ersten Blick verdammt einem Plus ähneln.



  • Was ist hier pingelig?

    "i++" ist nicht der Post-Inkrement-Operator, das ist einfach falsch. "++" ist der Post-Inkrement-Operator, "i++" ist eine Expression.



  • Simon2 schrieb:

    Gustl schrieb:

    ...
    @simon2
    i steht hier für eine Laufvariable, in einer schleife zb....

    Ich wollte auf Folgendes hinaus (und pumuckl wohl auch):

    struct meineKlasse {
       int b;
       meineKlasse(int d) :  b(d) {}
       int operator++() { cout << "Hallo\n"; return b++; }
    };
    
    int main() {
    
       {
          int i(0);
          i++; // (1)
       }
    
       {
          meineKlasse i(0);
          i++;   // (2)
       }
       return 0;
    }
    

    In beiden Fällen steht da "i++" ... doch einmal würdest Du vermutlich von "Rechnung"/"Operation"/... und das andere mal wohl eher von "Funktion".

    Ergo: Was passiert, ist von Typ abhängig.

    Ergo: Ob man das "Funktion" oder "Grundrechenoperation" nennt, ist so nicht zu beantworten,
    - ohne den Typ zu kennen oder
    - ohne definiert zu haben, was man mit den beiden Begriffen meint.

    Gruß,

    Simon2.

    Das, was du da definierst ist aber Präinkrement und nicht Postinkrement. Dafür müsstest du es mit einem dummy-int-Parameter deklarieren :p

    Felix



  • Phoemuex schrieb:

    ...
    Das, was du da definierst ist aber Präinkrement und nicht Postinkrement. Dafür müsstest du es mit einem dummy-int-Parameter deklarieren :p

    Felix

    Stimmt natürlich - damit hat natürlich der arme OP keine Chance mehr, zu verstehen, worauf ich hinaus will. 🙄

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Phoemuex schrieb:

    ...
    Das, was du da definierst ist aber Präinkrement und nicht Postinkrement. Dafür müsstest du es mit einem dummy-int-Parameter deklarieren :p

    Felix

    Stimmt natürlich - damit hat natürlich der arme OP keine Chance mehr, zu verstehen, worauf ich hinaus will. 🙄

    Gruß,

    Simon2.

    Nein, aber er wird sich wundern wenn er versucht den Code zu übernehmen/zu compilieren 😉


Anmelden zum Antworten