[Erledigt] C++ Referenz erzwingen



  • Kann man eigentlich in einer Funktion

    double get_double() { return val; }
    

    den Rückgabewert als Referenz erzwingen? So in etwa?

    double &refval = get_double();
    

    Wenn nein, was ist die variable Refval für ein Typ und was macht der Compiler mit dem "&"?



  • Was willst Du überhaupt machen?



  • Wenn die Funktion per Value zurückgibt (also keine Referenz), ist das undefiniertes Verhalten - wenn es denn überhaupt kompiliert. Denn du willst eine Refernez auf ein temporäres Objekt erzeugen, was absolut nicht geht.
    Wenn du eine Referenz haben willst, muss die Funktion auch einen "kompatiblen" Typ zurückgeben.



  • Walli schrieb:

    Was willst Du überhaupt machen?

    Ich möchte ein Objekt aus einer get_...() const Funktion möglichst Speicherschonend zurückgeben.

    Soll ich es dann schon in der Funktion als Referenz zurückgeben?
    Oder besser als const Zeiger?

    const typ* function(parameter);
    //oder
    const typ* function(parameter) const;
    // braucht man hier das zweite const?
    

    l'abra d'or__ schrieb:

    Wenn die Funktion per Value zurückgibt (also keine Referenz), ist das undefiniertes Verhalten - wenn es denn überhaupt kompiliert. Denn du willst eine Refernez auf ein temporäres Objekt erzeugen, was absolut nicht geht.
    Wenn du eine Referenz haben willst, muss die Funktion auch einen "kompatiblen" Typ zurückgeben.

    kompilieren lässt sich das 🙂
    Nur ist der Sinn anscheinend zweifelhaft.



  • darkfate schrieb:

    Ich möchte ein Objekt aus einer get_...() const Funktion möglichst Speicherschonend zurückgeben.

    Nimm eine Const-Referenz. Sei dir allerdings bewusst, dass Getterfunktionen Const-Referenzen meist aus Performance- oder Exceptionsicherheitsgründen zurückgeben, um nicht kopieren zu müssen. Das bedeutet nicht, dass du die Const-Referenz über längere Zeit speichern darfst!

    darkfate schrieb:

    kompilieren lässt sich das 🙂

    RValue-Objekte an Non-Const-Referenzen zu binden ist in C++ nicht erlaubt. Der MSVC++ ist hier etwas nachsichtig, gibt allerdings eine Warnung heraus.



  • Nexus schrieb:

    darkfate schrieb:

    Ich möchte ein Objekt aus einer get_...() const Funktion möglichst Speicherschonend zurückgeben.

    Nimm eine Const-Referenz. Sei dir allerdings bewusst, dass Getterfunktionen Const-Referenzen meist aus Performance- oder Exceptionsicherheitsgründen zurückgeben, um nicht kopieren zu müssen. Das bedeutet nicht, dass du die Const-Referenz über längere Zeit speichern darfst!

    Ok, also

    const &get_val();
    

    Könntest du mir noch den Unterschied zu dieser Notation nennen?

    const &get_val() const;
    

    Muss man dann überhaupt const an die Funktion dranhängen?



  • darkfate schrieb:

    Könntest du mir noch den Unterschied zu dieser Notation nennen?

    Mann mann mann .... Eigeninitiative gleich Null!
    Selbst wenn Du zu geizig bist, Dir ein gescheites C++ Buch zu zulegen, hättest Du das hier wenigstens googeln können, nicht?



  • [quote="krümelkacker"]

    darkfate schrieb:

    .. Eigeninitiative gleich Null!

    Wie kommst du jetzt da drauf? Hast du dafür einen Beleg oder willst du einfach nur wieder aus deiner Frustration heraus flamen?



  • Weil google nach "Funktion const" wirklich sowas von einfach ist, und auch als erstes Ergebnis eine passende Antwort geliefert hätte. Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.
    Du kannst auch mal nach "const correctness C++" googlen, falls es dir nur darum geht, für was das gut sein soll.



  • franz schrieb:

    Weil google nach "Funktion const"

    Stimmt nicht! Wieso behauptest du so einen Usinn.
    Der erste Treffer ist: http://www.vbarchiv.net/api/api_enumprinters.html
    Hat absolut nichts mit C++ zu tun.

    franz schrieb:

    Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.

    Stimmt auch nicht, ich habe zwei Bücher aus der Empfehlungsliste und in keinem stand es erklärt ob man sich das const hinten sparen kann. Hauptsache sinnlos geflamed.

    franz schrieb:

    Du kannst auch mal nach "const correctness C++" googlen, falls es dir nur darum geht, für was das gut sein soll.

    Den Begriff "const correctness C++" muss man nicht kennen, es hätte gelangt mir den Begriff zu nennen.



  • darkfate schrieb:

    Wie kommst du jetzt da drauf? Hast du dafür einen Beleg

    Wenn ich nach "c++ const method" google, finde ich die Antworten auf Deine Fragen. Ich gehe davon aus, dass Dir "Google" ein Begriff bist. => Du warst zu faul zum Googeln => Null Eigeninitiative.

    darkfate schrieb:

    oder willst du einfach nur wieder aus deiner Frustration heraus flamen?

    Wieder? Wenn Du wirklich an einer ehrlichen Antwort zu dieser Frage interessiert bist, kann ich sie Dir geben: Ich mag diese "Was ist 1+1?"-Fragen nicht. Auf so etwas zu antworten ist IMHO Verschwendung von Hilfbereitschaft. Wenn das, was Du schreibst, den Eindruck erweckt, als wärst Du zu faul die Antwort selbst zu suchen, musst Du mit UTFG-Antworten rechnen. Ganz einfach.



  • darkfate schrieb:

    franz schrieb:

    Weil google nach "Funktion const"

    Stimmt nicht! Wieso behauptest du so einen Usinn.
    Der erste Treffer ist: http://www.vbarchiv.net/api/api_enumprinters.html
    Hat absolut nichts mit C++ zu tun.

    Dann google mal nach Hyperbel :p

    darkfate schrieb:

    franz schrieb:

    Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.

    Stimmt auch nicht, ich habe zwei Bücher aus der Empfehlungsliste und in keinem stand es erklärt ob man sich das const hinten sparen kann. Hauptsache sinnlos geflamed.

    "Ob man sich das const sparen kann" ergibt sich aus der Erklärung für das const, was in jedem guten Buch drin stehen sollte. Mach nur weiter so.



  • darkfate schrieb:

    franz schrieb:

    Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.

    Stimmt auch nicht, ich habe zwei Bücher aus der Empfehlungsliste und in keinem stand es erklärt ob man sich das const hinten sparen kann. Hauptsache sinnlos geflamed.

    Weil die Autoren vielleicht denken, dass es reicht, wenn sie die Aufgabe des const hinter Funktionen erklären, und du dieses Konzept dann selbst anwenden kannst. Offenbar hätte da aber explizit stehen müssen: "Man kann sich das const in dem und dem Fall sparen", damit du was damit anfangen kannst. 🙄



  • darkfate schrieb:

    franz schrieb:

    Weil google nach "Funktion const"

    Stimmt nicht! Wieso behauptest du so einen Usinn.
    Der erste Treffer ist: http://www.vbarchiv.net/api/api_enumprinters.html
    Hat absolut nichts mit C++ zu tun.

    Dann entschuldige ich mich vielmals und behaupte das Gegenteil...
    Nö, mal im Ernst, wenn du schon im englischen google suchst, darfst du ruhig deine Anfrage auf Englisch formulieren (siehe krümelkacker). Im deutschen google (google.de) kriegt man tatsächlich einen wunderbaren Hinweis:
    http://www.wachtler.de/cpp/node51.html

    franz schrieb:

    Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.

    Stimmt auch nicht, ich habe zwei Bücher aus der Empfehlungsliste und in keinem stand es erklärt ob man sich das const hinten sparen kann. Hauptsache sinnlos geflamed.

    Danke, ebenso...
    Dann schau dich nach einem besseren Buch um. Welches ist es denn?

    franz schrieb:

    Du kannst auch mal nach "const correctness C++" googlen, falls es dir nur darum geht, für was das gut sein soll.

    Den Begriff "const correctness C++" muss man nicht kennen, es hätte gelangt mir den Begriff zu nennen.

    Du solltest jetzt genug Hinweise erhalten haben, wie du an die entsprechende Info gelangst. Wieso unnötigerweise Information verdoppeln, wenn es eh schon (eigentlich genügend oft) erklärt wurde?



  • darkfate schrieb:

    franz schrieb:

    Weil google nach "Funktion const"

    Stimmt nicht! Wieso behauptest du so einen Usinn.
    Der erste Treffer ist: http://www.vbarchiv.net/api/api_enumprinters.html
    Hat absolut nichts mit C++ zu tun.

    Dann spendier der Suchanfrage noch ein "C++" und du hast was du suchst. Erster link ganz unten, dritter link sagt auch alles...

    darkfate schrieb:

    franz schrieb:

    Außerdem sollte das in jedem halbwegs guten Buch erwähnt werden.

    Stimmt auch nicht, ich habe zwei Bücher aus der Empfehlungsliste und in keinem stand es erklärt ob man sich das const hinten sparen kann.

    Welche Bücher sind das? wenn das wirklich nicht erwähnt ist dann sollten sie aus der Liste rausgenommen werden. Franz' Aussage stimmt sehr wohl, mit Betonung auf "halbwegs gut".

    Und jetzt möchte ich alle hier bitten während der nächsten Posts drauf zu achten, dass der Ton nicht wieder völlig aus dem Ruder läuft. Das passiert hier leider viel zu oft in letzter Zeit.



  • krümelkacker schrieb:

    Wenn ich nach "c++ const method" google, finde ich die Antworten auf Deine Fragen. Ich gehe davon aus, dass Dir "Google" ein Begriff bist. => Du warst zu faul zum Googeln => Null Eigeninitiative.

    Wenn du weißst wonach du suchen musst, ist es einfach. Die Begriffe die mir eingefallen sind, haben bisher nichts hergegeben. Auch nicht das angebliche "const correctness c++" das hier gefallen ist.

    Beide Bücher geben nichts her, habe eben nochmal die Kapitel durchgelesen.
    Das nennst du Null Eigeninitiative?

    darkfate schrieb:

    Wieder? Wenn Du wirklich an einer ehrlichen Antwort zu dieser Frage interessiert bist, kann ich sie Dir geben: Ich mag diese "Was ist 1+1?"-Fragen nicht.

    Dann melde dich einfach nicht. Du musst doch nicht bei jeder Frage die dir nicht passt anfangen zu weinen?

    darkfate schrieb:

    Auf so etwas zu antworten ist IMHO Verschwendung von Hilfbereitschaft.

    Also wenn deine Beiträge nicht aufopfernde Hilfsbereitschaft ist...

    darkfate schrieb:

    Wenn das, was Du schreibst, den Eindruck erweckt, als wärst Du zu faul die Antwort selbst zu suchen, musst Du mit UTFG-Antworten rechnen. Ganz einfach.

    Sag mal muss ich jetzt vor jeder Frage die Quellen angeben wo ich bereits gesucht habe?



  • darkfate schrieb:

    Beide Bücher geben nichts her, habe eben nochmal die Kapitel durchgelesen.

    Welche Bücher sind das?

    Die Begriffe die mir eingefallen sind, haben bisher nichts hergegeben. Auch nicht das angebliche "const correctness c++" das hier gefallen ist.

    Mal sehen. Erster Link: http://www.parashift.com/c++-faq-lite/const-correctness.html. Punkt [18.10] What is a "const member function"?. Erster Treffer.

    Zweiter Link der Google-Suche: http://en.wikipedia.org/wiki/Const-correctness. Abschnitt 1.3 Methods.



  • darkfate schrieb:

    Wenn du weißst wonach du suchen musst, ist es einfach. Die Begriffe die mir eingefallen sind, haben bisher nichts hergegeben. Auch nicht das angebliche "const correctness c++" das hier gefallen ist.

    C++ FAQ Lite, dort unter Punkt 18 Const Correctness schauen (Bei google ist das aktuell bei mir sogar der erste Treffer).

    Diese C++ FAQ ist durchaus in vielen Punkten eine gute Anlaufstelle für erste Fragen (Da viele darin auch schon beantwortet werden). Anschließend kannst du gerne detaillierte Fragen stellen.

    darkfate schrieb:

    Beide Bücher geben nichts her,...

    Und nochmals: WELCHE Bücher?

    darkfate schrieb:

    Dann melde dich einfach nicht. Du musst doch nicht bei jeder Frage die dir nicht passt anfangen zu weinen?

    Freundlichkeit ist aber auch nicht deine Stärke, oder?

    Davon abgesehen macht es wenig Sinn alles aufs neue wiederholen zu müssen, wenn es bereits an anderer Stelle gut erklärt ist.



  • asc schrieb:

    Die Begriffe die mir eingefallen sind,
    haben bisher nichts hergegeben. Auch nicht das
    angebliche "const correctness c++" das hier gefallen ist.

    Zum x-ten mal:

    Der Begriff ist erst nach dem Flame von Krümmelkacker gefallen.

    Nachdem ich diesen Begriff bekommen habe,
    Bin ich zurechtgekommen, zumindest teilweise.

    darkfate schrieb:

    Beide Bücher geben nichts her,...

    Ich glaube das muss ich jetzt zurückziehen...
    Wenn das stimmt dass const in:

    typ get_value() const;
    

    Sich nur auf den this-> Pointer bezieht,
    dann habe ich darauf nicht geachtet. Mein Fehler.
    Wahrscheinlich ist es in einer Formulierung drin...

    asc schrieb:

    Freundlichkeit ist aber auch nicht deine Stärke, oder?

    Hast recht. Ich bin fast unverschämt.
    Es frustriert mich einfach wenn Leute einfach
    aus dem nichts heraus behaupten dass ich nichts
    tue/nicht suche/ nicht versuche das Problem
    selber zu lösen. Es ist einfach unangenehm...
    und schlichtweg unwahr.

    asc schrieb:

    Davon abgesehen macht es wenig Sinn
    alles aufs neue wiederholen zu müssen, wenn es
    bereits an anderer Stelle gut erklärt ist.

    Sehe ich absolut ein.
    Wie gesagt: Der Begriff "const correctness c++" wäre
    mir auf anhieb aber nicht eingefallen. Woher denn auch?
    Bevor der Begriff gefallen ist, hat Krümmelkacker
    schon angefangen zu flamen.

    Nachtrag:
    Es ist schön das alle jetzt mit dem
    Suchbegriff "const correctness c++" kommen.
    Es war auch der richtige Tipp.

    Schaut euch den Anfang des Threads an,
    der Begriff kam erst nach dem Flamen.



  • Hoi,...

    schon mal mit

    void function ( double & referenz)
    { referenz=get_double(); return;}
    
    //oder
    void function ( double * pointer)
    { *pointer=get_double(); return;}
    

    probiert ??

    Der stack von function wird ja wieder frei geräumt (je nach call convention...)

    grüüße


Anmelden zum Antworten