<?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 zurueckgeben]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mal eine Frage zur Rueckgabe von Referenzen. Sind folgende zwei Funktionen semantisch aequivalent? Und welche ist effizienter? Eigentlich doch die zweite, weil bei der ersten zwei HugeObjects im Speicher existieren. Oder kann der Compiler die erste Variante so optimieren, das es genauso effizient wie die Zweite ist?</p>
<pre><code class="language-cpp">HugeObject test() {
  HugeObject ret;
  return ret;
}

HugeObject&amp; test() {
  static HugeObject ret;
  return ret;
}
</code></pre>
<p>Viele Gruesse,<br />
Kip2</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221656/referenz-zurueckgeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 00:43:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221656.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Sep 2008 15:04:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz zurueckgeben on Mon, 01 Sep 2008 15:04:51 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mal eine Frage zur Rueckgabe von Referenzen. Sind folgende zwei Funktionen semantisch aequivalent? Und welche ist effizienter? Eigentlich doch die zweite, weil bei der ersten zwei HugeObjects im Speicher existieren. Oder kann der Compiler die erste Variante so optimieren, das es genauso effizient wie die Zweite ist?</p>
<pre><code class="language-cpp">HugeObject test() {
  HugeObject ret;
  return ret;
}

HugeObject&amp; test() {
  static HugeObject ret;
  return ret;
}
</code></pre>
<p>Viele Gruesse,<br />
Kip2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574835</guid><dc:creator><![CDATA[Kip2]]></dc:creator><pubDate>Mon, 01 Sep 2008 15:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurueckgeben on Mon, 01 Sep 2008 15:08:15 GMT]]></title><description><![CDATA[<p>Nein, die Funktionen unterscheiden sich semantisch.</p>
<p>Bei der ersten wird bei jedem Aufruf ein lokales Objekt erstellt, das dann für den Rückgabetyp kopiert wird. Vom Compiler kann das eventuell optimiert werden.</p>
<p>Bei der zweiten Funktion wird wegen <code>static</code> nur beim ersten Aufruf ein Objekt erstellt, das bis zum Programmende existiert. Ab da wird dann immer das gleiche Objekt zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574838</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 01 Sep 2008 15:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurueckgeben on Mon, 01 Sep 2008 15:12:24 GMT]]></title><description><![CDATA[<p>Hi,<br />
was der Compiler optimieren kann weiß ich nicht, aber vom Kode an sich ist letzterer schneller, da hier nur eine 4 Byte große Addresse zurückgegeben wird.</p>
<p>Aus obigem code wird im Regefall ein Kopierconstruktor aufgerufen, ist auch eher unwarscheinlich, dass der compiler daran etwas optimiert richtung pointer bzw. referenz.</p>
<p>Gruß,<br />
Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574840</guid><dc:creator><![CDATA[Andy2211]]></dc:creator><pubDate>Mon, 01 Sep 2008 15:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz zurueckgeben on Mon, 01 Sep 2008 15:13:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nein, die Funktionen unterscheiden sich semantisch.</p>
<p>Bei der ersten wird bei jedem Aufruf ein lokales Objekt erstellt, das dann für den Rückgabetyp kopiert wird. Vom Compiler kann das eventuell optimiert werden.</p>
<p>Bei der zweiten Funktion wird wegen <code>static</code> nur beim ersten Aufruf ein Objekt erstellt, das bis zum Programmende existiert. Ab da wird dann immer das gleiche Objekt zurückgegeben.</p>
</blockquote>
<p>Dazu kommt, dass die zweite Funktion problematisch sein kann, wenn der Benutzer nicht weiß, dass sich alle Aufrufe auf das selbe statische Objekt beziehen.</p>
<p>Die erste Methode ist die schönere. Und den zweiten Fall braucht man eigentlich auch nicht, wenn man auf Objekten arbeitet. Eventuell mal für eine Singleton.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574842</guid><dc:creator><![CDATA[S.T.A.L.K.E.R.]]></dc:creator><pubDate>Mon, 01 Sep 2008 15:13:57 GMT</pubDate></item></channel></rss>