const verständnis



  • hallo leute,
    ich habe schon viele tutorials angeschaut, aber ich blick nicht richtig durch wann man const benutzen sollte (ich weiss was const ist)

    das ist klar:

    const int test = 10;
    test = 20;            // compiler meckert, klar...
    

    a) aber wieso const hier ? man kann doch dieses wert in der function nicht verändern, der wird von der function zurückgeliefert und interne test variable wird zerstört:

    const int GetFunction()
    {
        int test = 10;
        return test;
    }
    

    b) oder das hier:

    void Function(const int test)
    {
        int x = test;
        x = x + 10;
        test = test + 10;    // ich denke mal, hier wird compiler meckern, oder ?
    }
    


  • Die Gründe wurde bereits zigmal im Netz dargelegt.

    Bitte lesen. Danke.

    Bye, TGGC (Reden wie die Großen)



  • TGGC schrieb:

    Die Gründe wurde bereits zigmal im Netz dargelegt.

    Bitte lesen. Danke.

    Bye, TGGC (Reden wie die Großen)

    @TGGC, vielen Dank für den Hinweis
    ich habe natürlich es gelesen, aber ich würde hier die Frage nicht stellen, wenn ich davor schon mich im Internet und in diesem Forum gesucht hätte.
    Leider ist mir da noch nicht alles klar geworden, deswegen frage ich in diesem Posting nochmal nach, ob evtl jemand mit anderen Worten mir das Problem erklären könnte,
    mfg



  • WeiseCoder schrieb:

    ich habe schon viele tutorials angeschaut, aber ich blick nicht richtig durch wann man const benutzen sollte (ich weiss was const ist)

    das ist klar:

    const int test = 10;
    test = 20;            // compiler meckert, klar...
    

    Gut. Das ist nämlich auch die einzig wirkliche sinnvolle Verwendung von const die man in deinem Beitrag finden kann.

    WeiseCoder schrieb:

    a) aber wieso const hier ? man kann doch dieses wert in der function nicht verändern, der wird von der function zurückgeliefert und interne test variable wird zerstört:

    const int GetFunction()
    {
        int test = 10;
        return test;
    }
    

    Völlig sinnlos. Der Rückgabewert ist auch so ein rvalue und damit unveränderbar.
    const by-value-Return macht nur bei benutzerdefinierten Typen sinn.
    Bsp:

    Foo operator+(const Foo&, const Foo&);
    // vs.
    const Foo operator+(const Foo&, const Foo&);
    

    Ersteres erlaubt sowas:

    Foo f, f2;
    (f + f) = f2;
    

    letzteres hingegen nicht. In diesem Fall sorgt das const dafür, dass sich dein UDT mehr wie ein builtin-Typ verhält.

    WeiseCoder schrieb:

    b) oder das hier:

    void Function(const int test)
    {
        int x = test;
        x = x + 10;
        test = test + 10;    // ich denke mal, hier wird compiler meckern, oder ?
    }
    

    In der *Deklaration* einer Funktion vollständig sinnlos, da

    void func(int);
    void func(const int);
    

    aus Sicht von C++ vollständig identische Funktionsdeklarationen sind. Das const hat also nur eine Aufgabe, nämlich den Leser zu verwirren.

    In der Definition einer Funktion kann man durch das const verhindern, dass du das Argument veränderst (wie du ja selbst schon geschrieben hast). Ich halte diese Praxis für wenig sinnvoll, da die Veränderung des Arguments sowieso nur innerhalb der Definition der Funktion sichtbar ist und damit eher unproblematisch. Gleichzeitig führt das häufig zu unnötigen Kopien des Arguments in eine lokale Variable.


Anmelden zum Antworten