Rückgabewert: Referenz oder nicht?



  • Dankeschön, ich glaub es hat Klick gemacht 🙂



  • bei (const) referenzen musst du dann nur darauf achten, dass so etwas nicht mehr geht:

    const std::string& ClassASD::GetName() const
    {
     return this->bla + ".txt";
    } //achtung undefiniert, da bla+".txt" hier zerstört wird!
    

    sondern du hier den string per value zurückgeben musst... so bald es aber möglich ist, solltest du es auch nutzen (außer bei PODs und idR beim operator[]) ^^

    bb



  • asc schrieb:

    [...] nicht-konstante Referenz [...]

    Konstante Referenzen [...]

    Tut mir leid, wenn ich so ein Detail kommentiere, aber das kann von Anfängern (für die Referenzen und Zeiger meist eh nicht trivial sind) schnell falsch aufgefasst werden.

    Referenzen sind per Definition konstant, können während ihrer Lebensdauer also nicht auf verschiedene Objekte verweisen und müssen bei ihrer Definition initialisiert werden. Das const sagt nur etwas über den referenzierten Typen aus - genauer, ob dieser über die Referenz geändert werden darf.

    Aus dem Grund verwende ich selber eigentlich immer die Begriffe "Const-Referenz" und "Non-Const-Referenz". Diese sind zwar auch nicht immer ganz eindeutig, aber meiner Ansicht weniger irreführend. 🙂



  • Ich merk mir das so:

    Referenz ~ dereferenzierter konstanter Zeiger auf irgend was. Muss natuerlich initialisiert werden, weil was konstantes, nicht veraenderbares was einen undefinierten Wert hat, macht ja kein sinn,

    ergo
    konstante referenz = dereferenzierter konstanter Zeiger auf einen konstanten (nicht veraenderlichen) Wert.

    Der C++ Begriff "Referenz" hat also technisch das erste konstant schon eingebaut IMHO. Aber mit der Zeit wenn man da mal durchgestiegen ist ... ist es nicht mehr so verwirrend ...

    Ciao ...



  • RHBaum schrieb:

    Der C++ Begriff "Referenz" hat also technisch das erste konstant schon eingebaut IMHO.

    Von konstanten Referenzen zu sprechen, ist aus diesem Grunde auch redundant.

    RHBaum schrieb:

    Aber mit der Zeit wenn man da mal durchgestiegen ist ... ist es nicht mehr so verwirrend ...

    Unter der Voraussetzung, dass man alles verstanden hat und weiss, dass Referenzen immer konstant sind, vielleicht. Aber trotzdem finde ich es besser, man achtet sich ein wenig auf die Begrifflichkeiten. Nicht nur, weil es Anfänger weniger verwirrt, sondern weil der Ausdruck "nicht-konstante Referenz" an sich einfach falsch ist.



  • Nexus schrieb:

    Nicht nur, weil es Anfänger weniger verwirrt, sondern weil der Ausdruck "nicht-konstante Referenz" an sich einfach falsch ist.

    Akzeptiert - auch wenn ich diese Begriffe durchaus als gebräuchlich aus mind. 2 Unternehmen kenne (Zudem so auch in deutschen Büchern verwendet wird, wie eine google-Suche erbracht hat).

    Dann wäre ich dennoch dafür das man einen möglichst kurzen Begriff oder Ausdruck im Deutschen findet.

    P.S: Mal ein kurzer Auszug der Bücher im deutschen die "nicht konstante Referenz" als Begriff verwenden:

    • C++: der Einstieg in die Programmierung (Ulrich Eisenecker)
    • Objektorientiertes Programmieren in C++ (Nicolai Josuttis)
    • Effektiv C++ Programmieren (Scott Meyers, Michael Tamm)
    • C++ GUI Programmierung mit QT 4: Die offizielle Einführung (Jasmin Blanchette, Mark Summerfield)
    • Die C++-standardbibliothek: Einführung und Nachschlagewerk (Stefan Kuhlins, Martin Schader)
    • Die C++-Programmiersprache (Bjarne Stroustrup, Nicolai Josuttis, Achim Lörke)
    • C++ Primer (Stanley B. Lippman, Josée Lajoie, Barbara E Moo)


  • asc schrieb:

    Akzeptiert - auch wenn ich diese Begriffe durchaus als gebräuchlich aus mind. 2 Unternehmen kenne (Zudem so auch in deutschen Büchern verwendet wird, wie eine google-Suche erbracht hat).

    Leider breiten sich falsche Begriffe schnell aus, wahrscheinlich weil sie hier die einfachste Möglichkeit darstellen. Zudem kann "non-const-reference" schnell mal zu "nicht konstanter Referenz" übersetzt werden...
    Aber gut, dass du das einsiehst. 🙂

    asc schrieb:

    Dann wäre ich dennoch dafür das man einen möglichst kurzen Begriff oder Ausdruck im Deutschen findet.

    Deutsch könnte schwierig werden. Aber für viele Dinge in der Informatik gibt es englische Ausdrücke oder Abkürzungen, die sehr gebräuchlich sind. Der beste, aber leider auch nicht ganz optimale Begriff scheint für mich immer noch "(Non-)Const-Referenz" (oder evtl. "-Reference"). Im Zweifelsfalle halt umschreiben...



  • Nexus schrieb:

    Aber gut, dass du das einsiehst. 🙂

    Dennoch werde ich die Begrifflichkeit nicht ändern, wenn ich nicht eine sinnvolle Entsprechung finde. Es gibt im deutschen einige Begriffe die nicht 100% passend sind, im Sprachgebrauch dennoch so verwendet werden.



  • asc schrieb:

    Es gibt im deutschen einige Begriffe die nicht 100% passend sind, im Sprachgebrauch dennoch so verwendet werden.

    Ah, das reicht natürlich bei Weitem als Rechtfertigung, selber Begriffe falsch zu verwenden. :p

    Nein, ich kann deine Haltung schon nachvollziehen, auch wenn ich sie persönlich nicht gut finde. Du hättest den ersten Schritt gegen nicht-konstante Referenzen machen können, aber nun gut... 😃



  • Nexus schrieb:

    asc schrieb:

    Es gibt im deutschen einige Begriffe die nicht 100% passend sind, im Sprachgebrauch dennoch so verwendet werden.

    Ah, das reicht natürlich bei Weitem als Rechtfertigung, selber Begriffe falsch zu verwenden. :p

    Dann steck aber bitte nie deine Kinder in den Kindergarten.

    Nexus schrieb:

    Nein, ich kann deine Haltung schon nachvollziehen, auch wenn ich sie persönlich nicht gut finde. Du hättest den ersten Schritt gegen nicht-konstante Referenzen machen können, aber nun gut... 😃

    Es gibt einen Grund warum ich das nur ablegen werde, wenn ich eine sinnvolle und relativ kurze Ersetzung bekomme:

    a) Ich mische ungern verschiedene Sprachen miteinander, das bringt den Lesefluss durcheinander (Ausnahmen sind solche Begriffe die sich tatsächlich durchgesetzt haben).

    b) Der Begriff wird von sehr viel Literatur verwendet, ich kenne ihn auch nur so. Ich behaupte auch mal das 95% der C++ Programmierer die Referenzen und const-correctness (in Kurzform kenne ich hier tatsächlich nur den englischen Begriff im üblichen Sprachgebrauch) kennen, dies auch verstehen.

    cu André


Anmelden zum Antworten