<?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 zurückgeben?]]></title><description><![CDATA[<p>Eine dumme Frage, ist das folgende in Ordnung?</p>
<pre><code>int Get()
{
    int i = 2;
    int &amp;iRef = i;
    return iRef;
}
</code></pre>
<p>Oder gibts da Probleme wegen lokaler Referenz?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332724/referenz-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 13:47:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332724.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2015 12:59:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 12:59:37 GMT]]></title><description><![CDATA[<p>Eine dumme Frage, ist das folgende in Ordnung?</p>
<pre><code>int Get()
{
    int i = 2;
    int &amp;iRef = i;
    return iRef;
}
</code></pre>
<p>Oder gibts da Probleme wegen lokaler Referenz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454071</guid><dc:creator><![CDATA[Referenz?]]></dc:creator><pubDate>Tue, 19 May 2015 12:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 13:08:02 GMT]]></title><description><![CDATA[<p>Du gibst keine Referenz zurück, also alles OK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454073</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 19 May 2015 13:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 13:12:32 GMT]]></title><description><![CDATA[<p>Edit:<br />
Ich brauch eine Brille Shade hat recht deine Funktion returned eine Kopie.<br />
Das was du mit der Referenz machst ist komplett unsinnig.<br />
Was möchtest Du damit erreichen?</p>
<p>~~Das ist wie du richtig erkannt hast eine lokale Referenz die, außerhalb des Scopes (&quot;{&quot; &quot;}&quot;) nicht mehr gültig ist.</p>
<p>Mit anderen Worten, dass ist ein Fehler man gibt niemals Referenzen auf lokale Objekte zurueck.</p>
<p>Ein int zu kopieren, kostet nichts es dürfte sogar genauso teuer sein die Referenz auf ein int zurückzugeben wie das int zu kopieren.~~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454074</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Tue, 19 May 2015 13:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 13:16:56 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Du gibst keine Referenz zurück, also alles OK.</p>
</blockquote>
<p>Ok super.</p>
<p>Ruvi schrieb:</p>
<blockquote>
<p>Edit:<br />
Ich brauch eine Brille Shade hat recht deine Funktion returned eine Kopie.<br />
Das was du mit der Referenz machst ist komplett unsinnig.<br />
Was möchtest Du damit erreichen?</p>
</blockquote>
<p>Ist ziemlich stark gekürzt, hab nur in einem code gesehen dass jemand sowas wie</p>
<pre><code>vector Get()
{
    return GetVector();
}
</code></pre>
<p>macht wobei GetVector eine Referenz zurückgibt, da wollte ich auf Nummer sicher gehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454075</guid><dc:creator><![CDATA[Referenz?]]></dc:creator><pubDate>Tue, 19 May 2015 13:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 13:22:38 GMT]]></title><description><![CDATA[<p>int Get()</p>
<p>und</p>
<p>vector Get()</p>
<p>liefern beide eine Kopie - also KEINE Referenz</p>
<p>wenn</p>
<p>int&amp; Get()</p>
<p>schreiben wuerdest gibts Warnungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454076</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Tue, 19 May 2015 13:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 16:43:31 GMT]]></title><description><![CDATA[<p>Es kann gerade auch bei einem vector sehr viel Sinn machen mit einer Referenz zu arbeiten. Gerade wenn viele Elemente enthalten sind, dann will man nicht unnötig kopieren. Wenn also die Gültigkeit sichergestellt ist, dann kann man auch mit einer Referenz weiterarbeiten.</p>
<p>Auch beim Befüllen sollte man darauf achten:</p>
<pre><code>std::vector&lt;int&gt; Fill()
{
 std::vector&lt;int&gt; v;
 // Füllen

 // Rückgabe einer Kopie(!). Eine Referenz wäre hier fatal!
 return v;
}
</code></pre>
<p>vs</p>
<pre><code>void Fill(std::vector&lt;int&gt;&amp; v)
{
 // Füllen
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2454091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454091</guid><dc:creator><![CDATA[hgjghj]]></dc:creator><pubDate>Tue, 19 May 2015 16:43:31 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 16:48:32 GMT]]></title><description><![CDATA[<p>hgjghj schrieb:</p>
<blockquote>
<p>Es kann gerade auch bei einem vector sehr viel Sinn machen mit einer Referenz zu arbeiten. Gerade wenn viele Elemente enthalten sind, dann will man nicht unnötig kopieren.</p>
</blockquote>
<p>Und genau aus diesem Grund gibt es die (N)RVO, die es dem Compiler erlaubt, sämtliche Kopien bei der Wertrückgabe zu eliminieren.<br />
Just trust the compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454092</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 19 May 2015 16:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 17:00:51 GMT]]></title><description><![CDATA[<p>Das ist aber eben auch nicht immer möglich und es tut sicher nicht weh es über eine Referenz zu lösen. Mehraufwand sehe ich hier nämlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454095</guid><dc:creator><![CDATA[fghfgh]]></dc:creator><pubDate>Tue, 19 May 2015 17:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 17:46:21 GMT]]></title><description><![CDATA[<p>Referenz auf nen vector zurückgeben macht mMn. hauptsächlich dann Sinn wenn der vector eben gerade keine lokale Variable bzw. Parameter ist.<br />
Also z.B. nen Member.<br />
Wobei es gerade dann auch meist ein wenig unsauber/gefährlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454099</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 19 May 2015 17:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 17:57:02 GMT]]></title><description><![CDATA[<p>fghfgh schrieb:</p>
<blockquote>
<p>Das ist aber eben auch nicht immer möglich und es tut sicher nicht weh es über eine Referenz zu lösen. Mehraufwand sehe ich hier nämlich nicht.</p>
</blockquote>
<p>Es macht eine deutlich hässlichere und unnatürliche Syntax.<br />
Und mit C++11 wird so oder so gemoved, da macht das minimalen Unterschied, ob die Optimierung angewendet wird oder nicht.<br />
Vertraue einfach dem Compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454102</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 19 May 2015 17:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Tue, 19 May 2015 18:03:15 GMT]]></title><description><![CDATA[<p>In welchen Fällen sind denn weder NRVO noch RVO nicht möglich?<br />
* Rückgabe von Parametern<br />
Sonst noch was?<br />
Wie sieht's mit der Rückgabe von Rückgabewerten aus?</p>
<p>BTW: Wenn man es wirklich in C++03 braucht, kann man doch eigentlich immer swap verwenden um doch wieder von der NRVO zu profitieren, nicht?</p>
<p>Also</p>
<pre><code class="language-cpp">vector Foo(/*was auch immer*/)
{
   ...

   vector rv;
   rv.swap(/*was auch immer*/);
   return rv; // NRVO, yeehah
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2454103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454103</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 19 May 2015 18:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Wed, 20 May 2015 09:29:50 GMT]]></title><description><![CDATA[<p>Super Lösung!</p>
<p>--- Rest gestrichen - falsch gedacht --- <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454171</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Wed, 20 May 2015 09:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Wed, 20 May 2015 09:17:52 GMT]]></title><description><![CDATA[<pre><code>void fill(vector&lt;T&gt; &amp;vref)
{
   // vref füllen
}
</code></pre>
<p>So, kein Streit ob RVO oder Referenzzurück geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454176</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 20 May 2015 09:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Wed, 20 May 2015 10:57:24 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<pre><code>void fill(vector&lt;T&gt; &amp;vref)
{
   // vref füllen
}
</code></pre>
<p>So, kein Streit ob RVO oder Referenzzurück geben.</p>
</blockquote>
<p>Das ist doch, worüber diskutiert wurde.<br />
Das ist nicht notwendig, es gibt RVO.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454186</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 20 May 2015 10:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Wed, 20 May 2015 11:39:07 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<pre><code>void fill(vector&lt;T&gt; &amp;vref)
{
   // vref füllen
}
</code></pre>
<p>So, kein Streit ob RVO oder Referenzzurück geben.</p>
</blockquote>
<p>Das ist doch, worüber diskutiert wurde.<br />
Das ist nicht notwendig, es gibt RVO.</p>
</blockquote>
<p>Obwohl es RVO gibt finde ich, dass von Artchi beschriebene Konstrukt richtiger als dein Ansatz Nathan.</p>
<p>Man sieht im Code exakt was passiert und verlässt sich nicht auf implizite Compiler-optimierungen die den Quatsch den man da hingeschrieben hat schon berichtigen werden.</p>
<p>Außerdem gibt es Fälle in denen RVO nicht greift und das muss man auch jedes mal bedenken.<br />
Bsp.:<br />
- return von Parameter<br />
- im return statement eine if/else ist<br />
- return of const Objekt (oder war das bei nur bei move?!)<br />
- Function call im return statement<br />
- Wenn der return type volatile oder atomic ist</p>
<p>Die Liste hat keinen 100% Anspruch auf Richtigkeit habe ich aus dem Gedächtnis runtergeschrieben ich hoffe ich konnte mich richtig erinnern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454188</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Wed, 20 May 2015 11:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurückgeben? on Wed, 20 May 2015 12:16:32 GMT]]></title><description><![CDATA[<p>Call by Reference ist aber etwas komplett anderes als (N)RVO und sehr oft ist das ja nicht mal substituierbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454194</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 20 May 2015 12:16:32 GMT</pubDate></item></channel></rss>