operator Fehler



  • std::string SYSInfo::getName(){ 
        if (dev[0].name.empty()) return{};
        return dev[0].name;   
    }
    

    das return{} gibt eine Inizializer-List mit 0 Elementen zurück. Was du meinst, ist return "";

    bzw. besser wäre es sogar so:

    const std::string& SYSInfo::getName(){ 
        if (dev[0].name.empty()) 
          return "";
        return dev[0].name;   
    }
    

    da hier der String nicht kopiert werden muss.

    Aber mal etwas nachgedacht, wie sieht ein leerer String aus? genau: "". Du überprüfst also, ob der String leer ist, wenn ja, gibst du "" zurück. sonst den String -> Überprüfung ist redundant. Ergo:

    const std::string& SYSInfo::getName(){ 
        return dev[0].name;   
    }
    


  • Enno schrieb:

    knivil schrieb:

    Und gibst dann was zurueck?

    0 oder nicht?

    Nein, auf raten wuerde ich verzichten! Schon mal deinen Rueckgabewert angesehen? 0 ist eine Zahl und kein std::string.



  • Cyres schrieb:

    bzw. besser wäre es sogar so:

    const std::string& SYSInfo::getName(){ 
        if (dev[0].name.empty()) 
          return "";
        return dev[0].name;   
    }
    

    da hier der String nicht kopiert werden muss.

    Nicht gut, da eine Referenz auf ein lokales temporäres Objekt zurückgegeben wird.



  • Spielt keine Rolle, da const-Referenzen auf temporäre Objekte erlaubt sind. Und die Methode gibt eine const-Referenz zurück => alles gut. Aber das ist ja doch nur die drittbeste Lösung, die zweitbeste hat Cyres ja direkt danach gepostet. Die beste Lösung ist imho

    const std::string& SYSInfo::getName() const
    { 
        return dev[0].name;   
    }
    


  • Warum das erste const und warum das zweite?
    Das ich die Überprüfung nicht brauch hab ich verstanden.



  • DocShoe schrieb:

    Spielt keine Rolle, da const-Referenzen auf temporäre Objekte erlaubt sind.

    Na dann ist es ja gut, dass ich das angesprochen habe. 😃 Wie lange lebt denn das temporäre Objekt?



  • Cyres schrieb:

    das return{} gibt eine Inizializer-List mit 0 Elementen zurück. Was du meinst, ist return "";

    Nein, das gibt einen default-konstruierten String zurück. Ist also nicht falsch (vermutlich allerding eher durch Zufall als durch planmäßiges Vorgehen), aber natürlich trotzdem überflüssig.



  • DocShoe schrieb:

    Spielt keine Rolle, da const-Referenzen auf temporäre Objekte erlaubt sind.

    Die Lebenszeit des referenzierten Objekts wird aber nur für Variablen im lokalen Scope verlängert.

    const int& i = 3; // ok
    


  • DocShoe schrieb:

    const std::string& SYSInfo::getName() const
    { 
        return dev[0].name;   
    }
    

    Kann das bitte noch einmal genau erklärt werden warum die zwei const da stehen?

    LG Enno



  • Kannst du dir vielleicht mal endlich ein Buch kaufen? 🙄



  • Kellerautomat schrieb:

    Kannst du dir vielleicht mal endlich ein Buch kaufen? 🙄

    Hab den Primer.
    Meinste ich kann da einfach unter

    const std::sting beispiel() const{
    .
    .
    .
    }
    

    gucken?



  • Du weisst aber hoffentlich schon, dass du durch den blossen Besitz eines Buches nicht schlauer wirst, oder?



  • Kellerautomat schrieb:

    Du weisst aber hoffentlich schon, dass du durch den blossen Besitz eines Buches nicht schlauer wirst, oder?

    Ich hab das ganze Buch, da ich es als PDF aufm Rechner hab, per such Funktion nach const String durchsucht ... Hab nichts gefunden was mir helfen könnte.
    Google bringt auch nichts vor. Da mir das in diesem Thread vorgeschlagen wurde das es die beste Möglichkeit ist dachte ich irgendwer ist so nett das dann auch zu erklären oder mir ein link zu geben. Da ich das gerne verstehen und lernen möchte. Solche Kommentare helfen mir gar nicht und sind nur nervig.



  • Setz dich mal einen Abend hin und lies das Ding von vorne bis hinten durch. Es ist dabei beim ersten Mal überhaupt nicht notwendig, dass du alles verstehst, Hauptsache die Grundkonzepte bleiben hängen.

    Beides kommt laut Inhaltsverzeichnis im ersten Teil ("Basics") dran (2.4 2.5 (References) und 7.7 (Class Member Functions)).



  • Athar schrieb:

    Setz dich mal einen Abend hin und lies das Ding von vorne bis hinten durch. Es ist dabei beim ersten Mal überhaupt nicht notwendig, dass du alles verstehst, Hauptsache die Grundkonzepte bleiben hängen.

    Beides kommt laut Inhaltsverzeichnis im ersten Teil ("Basics") dran (2.4 und 7.7).

    Bei welcher Version? 5? Ich hab 4.



  • Enno schrieb:

    Ich hab das ganze Buch [...] per such Funktion nach const String durchsucht ... Hab nichts gefunden was mir helfen könnte.

    Wie wäre es mit der Suche nach "const"? Es ist unwahrscheinlich, dass es im genau gleichen Code verwendet wird. Du musst schon etwas abstrahieren.

    Enno schrieb:

    Solche Kommentare helfen mir gar nicht und sind nur nervig.

    Du solltest aber auch etwas mehr Eigeninitiative zeigen. Nimm dir die Zeit, C++-Grundlagen in Ruhe anzuschauen. Sonst wirst du nach jedem kleinen Codestück wieder fragen müssen. Im Endeffekt benötigst du bei ständigem Nachfragen viel mehr Zeit, als wenn du es nur einmal lesen würdest. Vor allem verpasst du kein wichtiges Hintergrundwissen.



  • Enno schrieb:

    Ich hab das ganze Buch, da ich es als PDF aufm Rechner hab, per such Funktion nach const String durchsucht

    Das ist oft keine gute Methode, um in PDFs oder anderen (wortwörtlich) vielseitigen Dokumenten nach Sachverhalten/Erklärungen zu suchen.



  • Nexus schrieb:

    Du solltest aber auch etwas mehr Eigeninitiative zeigen. Nimm dir die Zeit, C++-Grundlagen in Ruhe anzuschauen. Sonst wirst du nach jedem kleinen Codestück wieder fragen müssen. Im Endeffekt benötigst du bei ständigem Nachfragen viel mehr Zeit, als wenn du es nur einmal lesen würdest. Vor allem verpasst du kein wichtiges Hintergrundwissen.

    Was meinst du was ich mache. Ich arbeite täglich von 8-17 Uhr muss dann mit dem Zug nach hause fahren d.h. ich bin 18 Uhr zu hause. Somit bleiben mir 5 stunden zum einkaufen, essen machen, sauber machen blablabla. Auf der arbeit kann ich leider nicht lesen sonder muss an meiner Aufgabe arbeiten. Ansonst versuche ich immer im Primer zu lesen wenn ich grade mal nicht "leben" muss. Ich lese wirklich viel und beschäftige mich mit c++. Es ist mir auch klar das ihr das nicht wisst und es euch wohl auch nicht interessiert. Allerdings versuche ich es zu lernen. Werde ich auch!



  • Enno schrieb:

    Es ist mir auch klar das ihr das nicht wisst und es euch wohl auch nicht interessiert.

    Dass mit zwei 's'.
    🤡
    Ansonsten: Du musst ja wirklich richtig scharf sein C++ zu lernen, bei deinem Zeitmangel... ich wünsch dir dass du es schaffst 🙂 👍



  • Sone schrieb:

    Dass mit zwei 's'.
    🤡
    Ansonsten: Du musst ja wirklich richtig scharf sein C++ zu lernen, bei deinem Zeitmangel... ich wünsch dir dass du es schaffst 🙂 👍

    Bssss gibt es doch nicht. Da achte ich nun wirklich drauf keine Fehler zu machen und tada bekomme ich ihn gleich um die Ohren gehauen.

    1. Ich brauch es nun mal.
    2. Interessiert es mich.
    3. Will = Motivation = Erfolg 😃 Sowas von geklaut!


Anmelden zum Antworten