bool test = (Klasse::staticFunction(), false);



  • Was genau passiert hierbei?

    class Klasse{
    public:
      static void staticFunction() { std::cout<<"Jawoll"<<endl;}
    };
    
    bool test = (Klasse::staticFunction(), false);
    
    int main()
    {
    ...
    }
    

    Also im Prinzip ist mir es klar. Bei Programmstart wird die statische Methode ausgeführt. Aber die Schreibweise irritiert mich etwas.
    Ist das nötig, weil staticFunction "void" als Rückgabewert hat und somit inkompatibel zu bool test ist?



  • Du setzt hier den berühmt-berüchtigten Komma-Operator ein 🤡
    Der Komma-Operator ist ein binärer Operator, so wie z.B. '+'. Er braucht also zwei Argumente, wertet erst das linke aus, dann das rechte, der Rückgabetyp des Operators ist dann das rechte Argument.
    Du kannst z.B. auch

    int Func()
    {
        return cout<<"hallo"<<endl, 10;
    }
    

    schreiben, hier wird 10 zurückgegeben und vorher das cout ausgeführt. Verrückte Sache und macht ein wenig die Übersicht im Programm kaputt (meiner Meinung nach).



  • Ich finde den Komma-Operator ganz nett - an Stellen, wo er nützlich ist. Der erlaubt es letztendlich, mehrere Funktionsaufrufe als einen Ausdruck zusammenzufassen. Verwenden würde ich ihn eigentlich nur, wenn ich an der Stelle kein Statement einsetzen kann (z.B. im Update-Part einer for()-Schleife).



  • Badestrand schrieb:

    Du setzt hier den berühmt-berüchtigten Komma-Operator ein 🤡
    Der Komma-Operator ist ein binärer Operator, so wie z.B. '+'. Er braucht also zwei Argumente, wertet erst das linke aus, dann das rechte, der Rückgabetyp des Operators ist dann das linke Argument.
    Du kannst z.B. auch

    int Func()
    {
        return cout<<"hallo"<<endl, 10;
    }
    

    schreiben, hier wird 10 zurückgegeben und vorher das cout ausgeführt. Verrückte Sache und macht ein wenig die Übersicht im Programm kaputt (meiner Meinung nach).

    der Rückgabetyp ist aber das rechte argument, wenn ich es richtig sehe, oder?
    Ansonsten... wieder was dazugelernt.



  • Standard 5.18 1 (Comma operator)

    ...The type and value of the result are the type and value of the right operand; the result is an lvalue if its right operand is.


Anmelden zum Antworten