<?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[Vermeidung der RÜckgabe einer lokalen Variable]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist das ein gängiger Weg, die Rückgabe einer lokalen Variable zu vermeiden:</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; doSomething() {
 std::vector&lt;char&gt; tmp; // lokale Variable
 // Befülle tmp usw.
 return std::vector&lt;char&gt;(tmp); // Rückgabe eines neuen Objektes durch Kopierkonstruktor
}
</code></pre>
<p>Oder fällt euch was geschickteres ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222384/vermeidung-der-rückgabe-einer-lokalen-variable</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 04:09:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222384.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Sep 2008 20:31:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Thu, 11 Sep 2008 20:31:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist das ein gängiger Weg, die Rückgabe einer lokalen Variable zu vermeiden:</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; doSomething() {
 std::vector&lt;char&gt; tmp; // lokale Variable
 // Befülle tmp usw.
 return std::vector&lt;char&gt;(tmp); // Rückgabe eines neuen Objektes durch Kopierkonstruktor
}
</code></pre>
<p>Oder fällt euch was geschickteres ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580493</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Thu, 11 Sep 2008 20:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Thu, 11 Sep 2008 20:40:27 GMT]]></title><description><![CDATA[<p>der kopierkonstruktor wird implizit aufgerufen.<br />
probleme hast du nur, wenn du eine referenz (also referenzen oder zeiger) auf ein lokales objekt zurückgibst, nicht aber kopien.</p>
<pre><code class="language-cpp">vector&lt;char&gt; foo ()
{
   vector&lt;char&gt; tmp;

   //...
   return tmp;
}

//aufruf:
vector&lt;char&gt; x = foo();
</code></pre>
<p>gute compiler machen dir daraus wohl denselben maschinencode, als würdest du folgendes (auf den ersten blick) &quot;schnelleres&quot; konstrukt verwenden</p>
<pre><code class="language-cpp">void foo (vector&lt;char&gt;&amp; tmp)
{
   //...
}

//aufruf:
vector&lt;char&gt; x;
foo(x);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1580499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580499</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 11 Sep 2008 20:40:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Thu, 11 Sep 2008 20:41:24 GMT]]></title><description><![CDATA[<p>Kommt auf die Verwendung an. Aber hier würde ich eher zur Übergabe per Referenz tendieren und dann den vector füllen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580502</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 11 Sep 2008 20:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Thu, 11 Sep 2008 21:20:14 GMT]]></title><description><![CDATA[<p>Es gibt keinen Grund, die Rückgabe vermeiden zu wollen, wenn sie dort richtig ist. Überflüssig und unnütz ist dagegen das Erstellen einer Kopie beim return, tatsächlich wird damit eine wesentliche Optimierung, nämlich NRVO, unmöglich gemacht. Der Ersatz durch Referenzübergabe wiederum durchbricht Abstraktionsschichten, erhöht die Koppelung zwischen Aufrufer und aufgerufener Funktion, gibt unnötig Verantwortung an den Aufrufer ab (der sich nun um die Erzeugung des Objektes kümmern muss), erhöht die Komplexität, erschwert Optimierungen und ist allgemein schlecht für die Gesundheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580522</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 11 Sep 2008 21:20:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Fri, 12 Sep 2008 06:09:59 GMT]]></title><description><![CDATA[<p>Da ich die Schnittstelle der Funktion nicht verändern darf, ist also das hier am besten:</p>
<pre><code class="language-cpp">vector&lt;char&gt; doSomething() {
 vector&lt;char&gt; tmp;
 // Befülle tmp usw.
 return tmp;
}
</code></pre>
<p>Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580589</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Fri, 12 Sep 2008 06:09:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Fri, 12 Sep 2008 08:12:21 GMT]]></title><description><![CDATA[<p>Yo, wie sonst? Meistens ist es einfacher als man denkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580674</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Fri, 12 Sep 2008 08:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vermeidung der RÜckgabe einer lokalen Variable on Fri, 12 Sep 2008 10:09:04 GMT]]></title><description><![CDATA[<p>Sollte dabei natürlich (eigentlich immer) bei der Rückgabe von Kopien eigener Objekte eigener Klassen darauf achten das der Kopierkonstruktor auch vernünftig definiert ist und nicht nur eine oberflächliche Kopie erstellt wird wo dies nicht erwünscht ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580782</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 12 Sep 2008 10:09:04 GMT</pubDate></item></channel></rss>