Const in methode (a.k.a. Wer Fehler findet darf sie behalten)



  • Stimmt. Habe zu schnell geantwortet. 🙂
    Hätte da wohl eher "macht" hingeschrieben, darum auch eher was kleines erwartet (respektive beim erste mal lesen gelesen). Ist mir auch erst aufgefallen, als ich "xD"'s Post gelesen habe. 😉



  • Psst, hat noch niemand gemerkt. Schnell weg damit! 😃



  • Da sieht man, was Gross/Kleinschreibung anrichten kann.

    Was hat das mit Groß/Kleinschreibung zu tun?

    @topic: Keine, wenn das keine Methode (Memberfunktion) ist



  • Ich fass mal zusammen...

    1. Lieber 3x lesen, wenn einen die Grammatik stutzig macht...
    2. Nimelas "Funktion" im Kontext einer "Funktion" sagen, wenn man "Bedeutung" oder "Aufgabe" meint.
      Gute Nacht... 😃


  • wx++ schrieb:

    Da sieht man, was Gross/Kleinschreibung anrichten kann.

    Was hat das mit Groß/Kleinschreibung zu tun?

    Nichts. Habe mich vertan. Manchmal sind meine Finger eben schneller, als mein Kopf. 😉 ( vor allem nach 3h Analysis )

    @topic: Keine, wenn das keine Methode (Memberfunktion) ist

    Ich bezweifle stark, dass das eine freie Methode ist, sonst macht das return i überhaupt keinen Sinn.



  • Nimelas

    Und es geht gleich weiter! 😃

    Das Wort muss ich mir merken, klingt nach Fantasy. Hier musste ich aber echt einige Sekunden studieren, bis ich drauf gekommen bin. 🙂



  • Nexus schrieb:

    Nimelas

    Und es geht gleich weiter! 😃

    Das Wort muss ich mir merken, klingt nach Fantasy.

    Nimelas! Ähh... Legolas! xD

    Liest du wirklich immer jedes Wort?! - Ich überles solche Sachen eh immer, weil ich meist gar nicht wirklich lesen, sondern nur die Wörter anschaue. 🙂
    Hab das mal ein wenig trainiert und bin mal bei ca. 1000WpM gewesen.



  • drakon schrieb:

    Liest du wirklich immer jedes Wort?!

    Wort schon, aber nicht jeden Buchstaben. Mir wäre auch nicht bekannt, dass ich besonders langsam oder schnell lese. Teilweise überlese ich Fehler auch, aber oft fallen mir falsch geschriebene Wörter gleich vom Schriftbild her auf. Doch dieser Thread ist sowieso ein Spezialfall. 😉



  • Nexus schrieb:

    Nimelas

    Und es geht gleich weiter! 😃

    Das Wort muss ich mir merken, klingt nach Fantasy. Hier musste ich aber echt einige Sekunden studieren, bis ich drauf gekommen bin. 🙂

    Sooo das kommt also nach 2h "Wächter der Nacht" + Rotwein raus...
    Aber merken ist nicht, ich habs erfunden 😛
    Und wenn ich das irgendwann mal in einem Science Fiction les oder seh, weiß ich ja wo das her ist 😉

    // edit:
    Alles klar. Nimelas ist der Held all jener, die schon vor ihrer Geburt von den bösen Eltern verheiratet werden.
    Nimelas ist der Retter der Versprochenen



  • So dann noch mal eine Frage:

    public:
    bool operator() (const T& a, const T& b) const {
    ...}
    

    Also das erste const sagt, die Referenz a darf nicht verendet werden. Analog zu b. Das letzte const sagt die Methode verändert nichts an dem Objekt.



  • Wo ist da die Frage?
    Ich sehe nur Aussagen, die allerdings richtig sind.



  • C++Noob_ schrieb:

    die Referenz a darf nicht verendet werden.

    Irgendwie ist in dem Thread der Wurm drin... 😃

    Und deine Feststellungen kann man so stehen lassen.



  • Ich kenne jemanden, der sich ein Buch mit dem Namen "effektiv C++ Programmieren" gekauft hat, in dem stand, dass ein const(ant) bei einer Funktion immer sinnvoll sei, wenn möglich, es heißt, dass dadurch die Geschwindigkeit des Programmes verbessert werde. [Ich halte mich in diesem Fall an den Konjunktiv.]
    Diesen Umstand hätte ich doch gern bestätigt oder wiederlegt gewusst. (Husten durch verstellen der Stimme *hust*)

    *Fehler suchend um Wortspiele zu vermeiden*



  • Hallo,
    ich mische mich hier mal ein. Wie sieht das bei Funktionen aus:

    const Rational add(const Rational& a, const Rational& b) {
    

    was macht da das erste const? das steht ja vor dem Rückgabetyo. Aber ein Konstanter Rückgabeltyp ist doch sinnlos, oder? Er ist ja eh nur temporär.



  • Naja, es ist nicht ganz sinnlos, da man sonst die temporäre Variable (sinnloserweise) verändern könnte. Man kann so einige triviale (aber selten auftretende) Fehler verhindern.

    #include <iostream>
    using namespace std;
    
    struct A {
      void foo() { cout << "foo\n"; } // foo ist nicht const!
    };
    
    A a() { return A(); }
    
    int main() {
      a().foo();
    }
    


  • Es besteht kein fundamentaler Grund, wieso temporäre Objekte nicht verändert werden dürfen. Zu dem const bei nicht-skalaren Rückgabetypen wurde vor einiger Zeit etwas geschrieben (zweiter Beitrag von camper), der Post ist sicher lesenswert.

    Auch Anfänger schrieb:

    Rückgabeltyp

    Ist das nun Absicht? 😃



  • Auch Anfänger schrieb:

    Hallo,
    ich mische mich hier mal ein. Wie sieht das bei Funktionen aus:

    const Rational add(const Rational& a, const Rational& b) {
    

    was macht da das erste const? das steht ja vor dem Rückgabetyo. Aber ein Konstanter Rückgabeltyp ist doch sinnlos, oder? Er ist ja eh nur temporär.

    In dem Fall ist er tatsächlich sinnlos. Es gab hier ja aber schon das Beispiel mit dem Getter. Hier mal ein Stück Code:

    class Foo
    {
    public:
        const GanzArgGrossesStruct &getPrivateData();
    
    private:
        GanzArgGrossesStruct privateData;
    };
    

    So kannst du beispielsweise eine Referenz auf private Daten zurückgeben. (Daten müssen so nur 1x kopiert werden, wenn das Struct groß ist, wirkt sich das durchaus aus.) Trotzdem kannst du es nachher aus der const Referenz in ein "normales" Objekt reinkopieren. Also z.B.

    Foo foo;
    
    GanzArgGrossesStruct meineKopie = foo.getPrivateData();
    


  • blub² schrieb:

    [...]

    Das Beispiel bei dir war allerdings eine konstante Referenz als Rückgabe. Dass die const sein müssen können (!) ist klar. Ebenso kann es durchaus sein, dass Pointer-to-const zurückgegeben werden. Wird aber ein Wert zurückgegeben, ist es meist kein Vorteil, wenn der const gemacht wird.


Anmelden zum Antworten