<?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[Werden (zurückgegebene) Referenzen immer total wegoptimiert?]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich frage mich, ob hier zB. &quot;myData&quot; Speicher oder sonst irgendwelche Resourcen verbraucht. Kann/Wird sowas immer wegoptimiert?</p>
<pre><code class="language-cpp">unsigned char data[] = { 1, 2, 3 };
unsigned char* pData = data;

unsigned char*&amp; myData = pData;

// myData[0] = ...
</code></pre>
<p>Und wie ist es mit Referenzen, welche von Funktionen zurückgegeben werden? Man denke an Konstrukte wie...</p>
<p>SomeClass::GetInstance()-&gt;GetObj1().GetObj2()-&gt;SetSomething(123);</p>
<p>Würden da jetzt wirklich alle Funktionen aufgerufen werden, oder kann/wird das zu &quot;obj2-&gt;SetSomething(123);&quot; optimiert? Ist es abhängig von dem Rückgabetyp?</p>
<p>Aber die Funktionen könnten ja noch mehr machen als nur irgendeine Instanz zurückzugeben. Erkennt das ein guter Compiler?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241520/werden-zurückgegebene-referenzen-immer-total-wegoptimiert</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 12:08:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241520.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 May 2009 18:56:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Werden (zurückgegebene) Referenzen immer total wegoptimiert? on Thu, 21 May 2009 18:56:09 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich frage mich, ob hier zB. &quot;myData&quot; Speicher oder sonst irgendwelche Resourcen verbraucht. Kann/Wird sowas immer wegoptimiert?</p>
<pre><code class="language-cpp">unsigned char data[] = { 1, 2, 3 };
unsigned char* pData = data;

unsigned char*&amp; myData = pData;

// myData[0] = ...
</code></pre>
<p>Und wie ist es mit Referenzen, welche von Funktionen zurückgegeben werden? Man denke an Konstrukte wie...</p>
<p>SomeClass::GetInstance()-&gt;GetObj1().GetObj2()-&gt;SetSomething(123);</p>
<p>Würden da jetzt wirklich alle Funktionen aufgerufen werden, oder kann/wird das zu &quot;obj2-&gt;SetSomething(123);&quot; optimiert? Ist es abhängig von dem Rückgabetyp?</p>
<p>Aber die Funktionen könnten ja noch mehr machen als nur irgendeine Instanz zurückzugeben. Erkennt das ein guter Compiler?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713878</guid><dc:creator><![CDATA[Deoptimierer]]></dc:creator><pubDate>Thu, 21 May 2009 18:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Werden (zurückgegebene) Referenzen immer total wegoptimiert? on Fri, 22 May 2009 16:53:30 GMT]]></title><description><![CDATA[<p>Deoptimierer schrieb:</p>
<blockquote>
<p>Ich frage mich, ob hier zB. &quot;myData&quot; Speicher oder sonst irgendwelche Resourcen verbraucht. Kann/Wird sowas immer wegoptimiert?</p>
<pre><code class="language-cpp">unsigned char data[] = { 1, 2, 3 };
unsigned char* pData = data;

unsigned char*&amp; myData = pData;

// myData[0] = ...
</code></pre>
</blockquote>
<p>Mit C++ hat das nicht viel zu tun (C++ gesteht myData nicht den Status eines Objekts zu, das sagt aber nichts über die Umsetzung aus), aber in deinem Beispiel ist das eine simple copy propagation, also würde ich erwarten, dass jeder ernsthafte Compiler zumindest myData und pData identifiziert. Abhängig davon, was du mit pData treibst, kann sogar dieser Zeiger wegfallen und durch data ersetzt werden.</p>
<blockquote>
<p>Und wie ist es mit Referenzen, welche von Funktionen zurückgegeben werden? Man denke an Konstrukte wie...</p>
<p>SomeClass::GetInstance()-&gt;GetObj1().GetObj2()-&gt;SetSomething(123);</p>
<p>Würden da jetzt wirklich alle Funktionen aufgerufen werden, oder kann/wird das zu &quot;obj2-&gt;SetSomething(123);&quot; optimiert? Ist es abhängig von dem Rückgabetyp?</p>
</blockquote>
<p>Das hängt davon ab, ob der Compiler sehen kann, was die Funktionen machen. inline wäre da schonmal von Vorteil. Wie gut Link-Time-Code-Generation ist (was erforderlich wäre, wenn die nicht inline sind) weiß ich nicht, aber da gilt dann prinzipiell dasselbe.</p>
<blockquote>
<p>Aber die Funktionen könnten ja noch mehr machen als nur irgendeine Instanz zurückzugeben. Erkennt das ein guter Compiler?</p>
</blockquote>
<p>Das ist zwar denkbar, aber ich kann mir nicht vorstellen, dass Compiler derartige Informationen sammeln. Die Funktion wird geinlinet und dann wird geschaut, ob sich da irgendwas vereinfachen lässt.</p>
<p>(edit: i.A. ist das natürlich keine Konstantenpropagation)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713888</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 22 May 2009 16:53:30 GMT</pubDate></item></channel></rss>