operator Fehler



  • knivil schrieb:

    Weiß jemand Rat zu diesem Fehler? Kommt Bei beiden Funktionen von oben!

    Ich sehe keinen Fehler, nur eine WARNUNG. Und ich finde die Warnung ziemlich eindeutig.

    Kann man das ignorieren? oder bekommt man das irgendwie weg?



  • Ja, lesen kann ich. Aber was gibst du zurueck? Also du testest, ob der Name leer ist. Wenn ja, dann gibst du einen leeren String zurueck, wenn nicht dann eben den Namen. Was passiert wenn du einfach nur den Namen zurueckgibst, wenn der Name einmal leer ist und wenn er einmal nicht leer ist? Wie unterscheidet sich das Ergebnis von Variante A im Vergleich zur Variante B?

    Btw. das ist kein Chat ... Bitte lesen, denken, ausprobieren, schreiben, ... in genau dieser Reihenfolge!



  • knivil schrieb:

    Und gibst dann was zurueck?

    0 oder nicht?



  • 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.


Anmelden zum Antworten