Parameter als Referenz übergeben unnötig?



  • cooky451 schrieb:

    Eisflamme schrieb:

    Eigentlich ist doch jede Referenz konstant, oder?

    Jain. Eine Referenz kann immer nur auf das Objekt zeigen, dem sie bei der Inititalisierung zugewiesen wurde, aber du kannst eine Referenz halt nicht const qualifizieren. http://ideone.com/z692u

    in der form

    T const &
    

    ist die lesart einfach verkehrt: referenz auf const T.
    da aber eine referenz immer auf ein objekt zeigt und immer auf das gleiche, ist es nicht unsinnig, den begriff "konstante referenz" als abkürzung für referenz auf const zu verwenden, was ja auch "const-reference" macht. wenn man allerdings nicht weiß, dass es

    T & const
    

    nicht gibt, würde es tatsächlich verwirrung machen, von const-reference oder konstanter referenz zu sprechen. referenz auf const ist in diesem fall besser, ansonsten egal.



  • oops schrieb:

    da aber eine referenz immer auf ein objekt zeigt und immer auf das gleiche, ist es nicht unsinnig, den begriff "konstante referenz" als abkürzung für referenz auf const zu verwenden, was ja auch "const-reference" macht.

    Doch, "konstante Referenz" ist immer unsinnig.

    "Const reference" hingegen ist völlig angebracht, sogar der C++-Standard verwendet diesen Begriff. Und er bedeutet auch nicht "konstante Referenz", das wäre nämlich "constant reference".



  • Nexus schrieb:

    "Const reference" hingegen ist völlig angebracht, sogar der C++-Standard verwendet diesen Begriff. Und er bedeutet auch nicht "konstante Referenz", das wäre nämlich "constant reference".

    "constant reference" kann man aber genauso mit konstantenreferenz übersetzen, was genau dasselbe bedeutet, wie "const-reference", nämlich eine referenz auf eine konstante.

    ich stimme dir schon zu, dass "konstante referenz" nicht eindeutig ist, eine konstanten-referenz wäre der eindeutige begriff; aber weil eine referenz immer auf das gleiche objekt verweist (und für diese definition keine wortspiele braucht), ist es absolut legitim, zu sagen "konstante referenz", wenn damit eine konstantenreferenz gemeint ist, weil aus dem kontext eindeutig klar wird, was gemeint ist.



  • Schön, dass du mit "Konstantenreferenz" noch einen weiteren Begriff einführst, den erst recht niemand versteht :p

    Wie gesagt, "const reference" ist der offizielle Ausdruck. Auf deutsch würde ich ihn mit "Const-Referenz" übersetzen. Er bezieht sich auf das Schlüsselwort const , was im Deutschen ebenfalls const ist. Es gibt sogar die Typdefinition const_reference bei Containern, die normalerweise const T& entspricht. Genauso wie bei const_iterator , das ist ja auch kein konstanter Iterator. Gleiches gilt für const_pointer . Wieso sollte es bei Referenzen plötzlich anders sein?

    "Konstante Referenz" ist gerade für Anfänger unnötig verwirrend, weil der wörtliche Begriff 1. unnötige Information enthält (Referenzen sind immer konstant), 2. wichtige Information weglässt (ist das referenzierte Objekt konstant?) und 3. den Eindruck macht, dass es auch nicht-konstante Referenzen gäbe, was einfach nur falsch ist.

    Während es sogar kürzer ist, "const reference" oder "Const-Referenz" zu schreiben, entspricht es auch dem im C++-Standard verwendeten Begriff und ist eindeutig. Also einigen wir uns doch bitte darauf 🙂



  • Nexus schrieb:

    Während es sogar kürzer ist, "const reference" oder "Const-Referenz" zu schreiben, entspricht es auch dem im C++-Standard verwendeten Begriff und ist eindeutig. Also einigen wir uns doch bitte darauf 🙂

    gut, ich spreche immer gut auf das argument der kürze an 🙂



  • oops schrieb:

    in der form

    T const &
    

    ist die lesart einfach verkehrt: referenz auf const T.

    Wenn man Typen von Rechts nach Links liest, ist das absolut legitim und korrekt so.



  • das "verkehrt" war nicht abwertend gemeint. das sollte einfach heißen, dass man, wenn man das so schreibt, konsistenter lesen kann (nämlich von rechts nach links (und war eine anspielung auf den anderen thread, wo es auch genau darum geht) - wenn man schreibt

    const T &
    

    ist das aber sicher "üblicher" (iSv mehr leute machen das so) und man kann es immer noch von rechts nach links lesen: referenz auf eine T-konstante. ("reference to a T-typed constant")



  • oops schrieb:

    ist das aber sicher "üblicher" (iSv mehr leute machen das so)

    Kannst du das belegen? Sprich: Statistiken über nennenswerte Projekte, die belegen, dass die "const T&" Schreibweise häufiger vorkommt als die "T const&"?
    Mal abgesehen vom nicht vorhandenen Komparativ von "üblich" sollte so eine Statistik im Sinne von "üblich" natürlich eine signifikanten Unterschied zeigen, 55% zu 45% wäre z.B nicht wirklich signifikant.
    So oder so sollte man als Entwickler beide Schreibweisen lesen können, eben weil sie beide begründet sind und beide vorkommen.



  • pumuckl schrieb:

    beide begründet

    Ich hätte dann gerne eine Begründung für "const T".



  • Nexus: Ich finde den Begriff Konstantenreferenz eigentlich sehr gut, denn er füllt genau die Lücke, die es ja anscheinend gegeben hat.
    T const& ist ja nichts anderes als eine Referenz auf eine Konstante 🙂

    Konstante Referenz ist semantisch nicht sinnvoll, dem stimme ich zu.

    pumuckl: Diese Methode zu entscheiden, was besser ist, finde ich nicht besonders sinnvoll, da sie auf eine positive Rückkopplung hinausläuft.
    Zumindest mich ärgert es, dass oftmals die bekannteste, aber nicht die beste, Lösung genommen wird.



  • int i = 42;
    int const& r = i; // Referenz auf Konstante?
    


  • C++ Primer -> "const T"
    Die C++-Programmiersprache -> "const T"
    Damit wären manche Forenmitglieder klüger und besser als Stroustrup und Lipman zusammen.
    Wenn man nicht gerade das Arabische zur Muttersprache hat, ist man es gewohnt, von links nach rechts zu schreiben/lesen. Für nicht-C++-Muttersprachler ist es deshalb einfacher, Typen von links nach rechts zu entschlüsseln. Das sollte mMn. als Argument für "const T" (konstantes T) reichen. Aber wie vieles ist es Gewohnheit, und wenn erst einmal alle Bücher, alle Tutorials und alle C++-Projekte korrigiert sind, werden auch sicherlich alle brav "T const" schreiben...



  • Wenn du mit der Sprachkeule kommen möchtest, solltest du auch etwas weiter denken, finde ich.
    Nimm zum Beispiel die französische Sprache, dort stehen Adjektive zumeist auch nach dem Substantiv, auf das sie ich beziehen, man muss also nicht bis zum Arabischen gehen, um andere Wortstellungen zu sehen 😉
    (const hat meiner Meinung nach Ähnlichkeit zu Adjektiven)
    (Außerdem hilft es, ganz schematisch davon auszugehen, dass das wichtigste links steht, und dann die Attribute kommen, die den Typ näher bestimmen, anstatt zu versuchen, die Typenangaben in natürliche Sprachen zu übersetzen)


Anmelden zum Antworten