<?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[Return Optimierung]]></title><description><![CDATA[<p>Bsp1:</p>
<pre><code>std::string function3_by_value ()
{
   std::string ergebnis(“foobar“);
   return ergebnis;
}
</code></pre>
<p>Bsp2:</p>
<pre><code>std::string function3_rvo ()
{
   return std::string (“foobar“);
}
</code></pre>
<blockquote>
<p>function3_rvo zeigt eine leicht abgewandelte Version von function3_by_value, in der das lokale benannte Objekt ergebnis durch ein unbenanntes ersetzt wurde. Dieses ist allerdings selbst noch kein Vorteil gegenüber der ursprünglichen Version. Der Vorteil liegt darin, dass es Compilern erlaubt ist, solche unbenannten Variablen zu eliminieren, d.h. der Compiler kann Code erzeugen, in<br />
dem weder das unbenannte lokale Objekt innerhalb der Funktion, noch die Kopie der return-by-value Rückgabe existieren. Solche Optimierungen werden als Returnwertoptimierung (engl. return value optimization) bezeichnet und sind in heutigen Compilern weit verbreitet.</p>
</blockquote>
<p>also ich sehe keinen Vorteil hier, bei Bsp1 &quot;ergebnis&quot;(die bekannte Variable) wird nachher auch gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136909/return-optimierung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 15:04:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136909.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Feb 2006 08:41:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 08:41:19 GMT]]></title><description><![CDATA[<p>Bsp1:</p>
<pre><code>std::string function3_by_value ()
{
   std::string ergebnis(“foobar“);
   return ergebnis;
}
</code></pre>
<p>Bsp2:</p>
<pre><code>std::string function3_rvo ()
{
   return std::string (“foobar“);
}
</code></pre>
<blockquote>
<p>function3_rvo zeigt eine leicht abgewandelte Version von function3_by_value, in der das lokale benannte Objekt ergebnis durch ein unbenanntes ersetzt wurde. Dieses ist allerdings selbst noch kein Vorteil gegenüber der ursprünglichen Version. Der Vorteil liegt darin, dass es Compilern erlaubt ist, solche unbenannten Variablen zu eliminieren, d.h. der Compiler kann Code erzeugen, in<br />
dem weder das unbenannte lokale Objekt innerhalb der Funktion, noch die Kopie der return-by-value Rückgabe existieren. Solche Optimierungen werden als Returnwertoptimierung (engl. return value optimization) bezeichnet und sind in heutigen Compilern weit verbreitet.</p>
</blockquote>
<p>also ich sehe keinen Vorteil hier, bei Bsp1 &quot;ergebnis&quot;(die bekannte Variable) wird nachher auch gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993675</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Tue, 14 Feb 2006 08:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 08:46:22 GMT]]></title><description><![CDATA[<p>Der Unterschied ist, wenn eine solche Funktion aufgerufen wird</p>
<pre><code class="language-cpp">std::string test = function3_rvo()
</code></pre>
<p>es dem Compiler erlaubt ist test direkt aus std::string(&quot;foobar&quot;) zu konstruieren. Es fällt ein temporäres Objekt weg. Das ist bei der anderen Funktion nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993679</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 14 Feb 2006 08:46:22 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 10:19:22 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Der Unterschied ist, wenn eine solche Funktion aufgerufen wird</p>
<pre><code class="language-cpp">std::string test = function3_rvo()
</code></pre>
<p>es dem Compiler erlaubt ist test direkt aus std::string(&quot;foobar&quot;) zu konstruieren. Es fällt ein temporäres Objekt weg. Das ist bei der anderen Funktion nicht der Fall.</p>
</blockquote>
<p>AFAIK ist dem nicht so.<br />
Zuweisung ist nicht gleich CopyConstruction (z.B. Typen mit Ref counting).<br />
T x=a; gleich Tx(a), gilt nur für POD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993758</guid><dc:creator><![CDATA[b7f7]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 10:31:15 GMT]]></title><description><![CDATA[<p>T x=a;</p>
<p>ist aber keine Zuweisung sonder ebenfalls CopyConstruction. Der Unterschied ist nur, dass das eine direkte Initialiserung ist und das andere nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993771</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 10:36:57 GMT]]></title><description><![CDATA[<pre><code>T x = a;
</code></pre>
<p>==</p>
<pre><code>T x(a);
</code></pre>
<p>Aufruf des Copy-Ctor</p>
<pre><code>T x;
x = a;
</code></pre>
<p>Aufruf des overLoading T&amp; operator=(const T&amp; s);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993775</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 10:43:27 GMT]]></title><description><![CDATA[<p>Korrekt. Sind wir uns also einig dass der Compiler obiges Beispiel zu</p>
<pre><code class="language-cpp">std::string test(&quot;foobar&quot;);
</code></pre>
<p>zusammenoptimieren kann, so er denn mag <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/993780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993780</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 11:00:32 GMT]]></title><description><![CDATA[<blockquote>
<p>T x=a; gleich Tx(a), gilt nur für POD</p>
</blockquote>
<p>verstehe ich nicht, was passiert wenn in T eine virtuelle Funktion steckt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993799</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Tue, 14 Feb 2006 11:00:32 GMT</pubDate></item><item><title><![CDATA[Reply to Return Optimierung on Tue, 14 Feb 2006 19:01:43 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<blockquote>
<p>T x=a; gleich Tx(a), gilt nur für POD</p>
</blockquote>
<p>verstehe ich nicht, was passiert wenn in T eine virtuelle Funktion steckt</p>
</blockquote>
<p>Dann ist es kein POD mehr.<br />
T x=a; gleich T x(a) gilt übrigens immer, nicht nur für PODs. Der Unterschied besteht eigentlich nur darin, dass ersteres nicht funktioniert, sofern der ctor explizit ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994227</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:01:43 GMT</pubDate></item></channel></rss>