<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Referenz als Rückgabe]]></title><description><![CDATA[<p>Ich habe mal eine Frage zu Referenzen als Rückgabetyp.<br />
Wann genau macht sowas Sinn? Beispiel:</p>
<pre><code class="language-cpp">string &amp; func(string &amp;temp)
{
     return temp;
}
</code></pre>
<p>Für mich gibt es nur 2 Fälle:<br />
1. Ich kann die Funktion als Lvalue fungieren lassen, und sozusagen über den Rückgabewert &quot;temp&quot; dass Argument verändern (solange es eine Variable und keine literal konstante ist [hierzu müsste der Parameter aber ja &quot;const&quot; sein])<br />
2. In meinem Buch steht, normalerweise wird bei der Rückgabe ein temporäres Objekt erstellt (also eine Kopie), außer wenn ich etwas über eine Referenz zurückgebe. Und nun zu meiner Frage: Dass macht aber doch nur Sinn, wenn die Rückgabe wieder auf eine Referenz erfolgt (was dann langsam ziemlich konfus wird (!!!), und ich meinen Rückgabetyp in &quot;const&quot; umändern sollte). Beispiel:</p>
<pre><code class="language-cpp">string wort = &quot;Haus&quot;;
string &amp;a = func(wort); 
string b = func(wort); //weil hier würde ja wieder eine Kopie stattfinden? Also gehts doch nur wenns wieder auf eine Referenz übergeben wird.
</code></pre>
<p>Sind meine Gedanken da richtig? Oder verstehe ich was diesen Punkt anbelangt etwas falsch?<br />
Wann macht die Referenz eurer Meinung nach noch Sinn?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257429/referenz-als-rückgabe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 07:31:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257429.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Dec 2009 15:14:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz als Rückgabe on Mon, 28 Dec 2009 15:14:58 GMT]]></title><description><![CDATA[<p>Ich habe mal eine Frage zu Referenzen als Rückgabetyp.<br />
Wann genau macht sowas Sinn? Beispiel:</p>
<pre><code class="language-cpp">string &amp; func(string &amp;temp)
{
     return temp;
}
</code></pre>
<p>Für mich gibt es nur 2 Fälle:<br />
1. Ich kann die Funktion als Lvalue fungieren lassen, und sozusagen über den Rückgabewert &quot;temp&quot; dass Argument verändern (solange es eine Variable und keine literal konstante ist [hierzu müsste der Parameter aber ja &quot;const&quot; sein])<br />
2. In meinem Buch steht, normalerweise wird bei der Rückgabe ein temporäres Objekt erstellt (also eine Kopie), außer wenn ich etwas über eine Referenz zurückgebe. Und nun zu meiner Frage: Dass macht aber doch nur Sinn, wenn die Rückgabe wieder auf eine Referenz erfolgt (was dann langsam ziemlich konfus wird (!!!), und ich meinen Rückgabetyp in &quot;const&quot; umändern sollte). Beispiel:</p>
<pre><code class="language-cpp">string wort = &quot;Haus&quot;;
string &amp;a = func(wort); 
string b = func(wort); //weil hier würde ja wieder eine Kopie stattfinden? Also gehts doch nur wenns wieder auf eine Referenz übergeben wird.
</code></pre>
<p>Sind meine Gedanken da richtig? Oder verstehe ich was diesen Punkt anbelangt etwas falsch?<br />
Wann macht die Referenz eurer Meinung nach noch Sinn?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828907</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 28 Dec 2009 15:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz als Rückgabe on Mon, 28 Dec 2009 15:43:56 GMT]]></title><description><![CDATA[<p>Hatten wir auch erst gerade so ähnlich:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1828077.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1828077.html</a></p>
<p>Aber grundsätzlich hast du recht. Gebraucht wird das vor allem, wenn man etwas eleganter hinschreiben will und so eine Verkettung von Funktionsaufrufen hat. ( wie eben z.B bei den Stream Operatoren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828921</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 28 Dec 2009 15:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz als Rückgabe on Mon, 28 Dec 2009 15:49:30 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Sind meine Gedanken da richtig?</p>
</blockquote>
<p>Ja, da hast du Recht. Wenn man allerdings allfällige Compileroptimierungen weglässt, erzeugt der folgende Code ohne Referenzrückgabe zwei Kopien:</p>
<pre><code class="language-cpp">string func(string&amp; temp)
{
    return temp; // Rückgabe: erste Kopie
}

// Zuweisung: zweite Kopie
string b = func(wort);
</code></pre>
<p>In der Praxis können solche temporären Objekte aber gut wegoptimiert werden. Nun, Referenzen als Rückgabetypen braucht man trotzdem. Ein bekannter Fall, wo gleich ein Parameter wieder zurückgegeben wird, ist ein globaler Streamoperator:</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; stream, const MyClass&amp; obj);
</code></pre>
<p>Ansonsten (nicht als Weiterleitung von Argumenten) machen zurückgegebene Referenzen bei freien Funktionen wenig Sinn, weil diese auf lokale automatische (sehr böse), statische (selten) oder globale Variablen (meist unschön) zeigen müssten.</p>
<p>Hingegen verwendet man bei Memberfunktionen ab und zu Referenzrückgaben, wenn auch meistens <code>const</code> -qualifiziert (Referenzen auf veränderbare Ziele zurückzugeben hebelt das Prinzip von Getter und Setter aus). Manche Leute sind sogar der Ansicht, Const-Referenzen verletzen die Kapselung. Ich persönlich halte solche Pauschalaussagen für Unsinn. Natürlich kann in einzelnen Fällen eine Kopie sinnvoller sein, aber eine Referenz ist erstens schneller und zweitens je nach Semantik die einzige Möglichkeit (z.B. bei nichtkopierbaren Objekten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828923</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 28 Dec 2009 15:49:30 GMT</pubDate></item></channel></rss>