<?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[Referenzen benutzen]]></title><description><![CDATA[<p>Hi Community <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":]"
      alt="🙂"
    /><br />
Ich habe eine Frage und zwar hab ich gelesen dass man &quot;call by reference&quot; benutzen sollte und zwar erst wenn das übergebene Objekt größer als 4 Bytes ist und wenn z.B mehrere Werte verändert zurückgegeben werden sollen. Nun meine Frage ist ob das mit den 4 Bytes nur eine Richtlinie ist oder eine Art Pflicht die dem Standart entspricht? Oder ist einfach der &quot;Zeitgewinn&quot; wenn man die kleineren Objekte als Referenz übergibt so gering dass es sich erst bemerkbar ab 4 Bytes macht?</p>
<p>danke für jede Antwort</p>
<p>lg c4f</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219551/referenzen-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 03:58:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219551.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Aug 2008 19:47:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 19:47:39 GMT]]></title><description><![CDATA[<p>Hi Community <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":]"
      alt="🙂"
    /><br />
Ich habe eine Frage und zwar hab ich gelesen dass man &quot;call by reference&quot; benutzen sollte und zwar erst wenn das übergebene Objekt größer als 4 Bytes ist und wenn z.B mehrere Werte verändert zurückgegeben werden sollen. Nun meine Frage ist ob das mit den 4 Bytes nur eine Richtlinie ist oder eine Art Pflicht die dem Standart entspricht? Oder ist einfach der &quot;Zeitgewinn&quot; wenn man die kleineren Objekte als Referenz übergibt so gering dass es sich erst bemerkbar ab 4 Bytes macht?</p>
<p>danke für jede Antwort</p>
<p>lg c4f</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559220</guid><dc:creator><![CDATA[c4f]]></dc:creator><pubDate>Mon, 04 Aug 2008 19:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:05:13 GMT]]></title><description><![CDATA[<p>Die 4 Bytes scheinen mir ein relativ willkürlicher Wert. Vom Standard ist hier nichts vorgeschrieben. Grundsätzlich gilt, dass man grössere Datentypen (meistens Klasseninstanzen) besser per Referenz übergibt, weil man sich so die Zeit für die Kopie spart. Bei den elementaren Typen wie <code>int</code> oder <code>double</code> (8 Byte) lohnt sich das meistens nicht (weil bei einer Referenz noch Zeit für die Dereferenzierung benötigt wird).</p>
<p>Da kommt hinzu, dass man kopierte Objekte nicht verändern kann, per Referenz übergebene jedoch schon. Willst du sie trotzdem nicht verändern, aber wegen Geschwindigkeit als Referenz übergeben, kannst du das mit einer konstanten Referenz lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559227</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:06:25 GMT]]></title><description><![CDATA[<p>Ich kann jetzt nicht sagen, ob dieses Aussage richtig oder falsch ist. Ich kann nur sagen, dass mir in dem Zusammenhang sowas seltsames wie diese, ich nenn es jetzt mal, Behauptung noch nie untergekommen ist <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="😉"
    /> Ob nun &quot;call by value&quot; oder &quot;call by reference&quot; das richtige ist, diese Frage stellte sich nur, wenn man sich vorher sicher war, ob man einen einer Funktion übergeben Wert verändern möchte oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559228</guid><dc:creator><![CDATA[Berufspenner]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:07:50 GMT]]></title><description><![CDATA[<p>Ok danke für die Antwort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559229</guid><dc:creator><![CDATA[c4f]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:08:43 GMT]]></title><description><![CDATA[<p>ist eine richtlinie, aber kleinere objekte lohnen sich gar nicht, weil er bei ner addresse ja eh 4byte kopieren muss (bei 32bit systemen)...</p>
<p>wenn der copy-ctor trivial genug ist lohnt es sich ebenfalls auf (const) referenzen zu verzichten.<br />
referenzen sind ja auch nichts anderes, als pointer (die intern verwaltet werden) - also müssen sie auch (intern) dereferenziert werden...</p>
<p>also _kann_ es (rein theoretisch) auch noch effektiver sein, ein 10 byte großes objekt per value und nicht per referenz zu übergeben - aber das muss man sich natürlich immer selbst überlegen und zur not mal mit dem profiler bissl rumspielen und vergleichen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559230</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:15:56 GMT]]></title><description><![CDATA[<blockquote>
<p>das muss man sich natürlich immer selbst überlegen und zur not mal mit dem profiler bissl rumspielen und vergleichen...</p>
</blockquote>
<p>Da möchte ich mal das zur Not hervorheben. Der c-tor wird in kaum einem Fall ein Problem werden, was die Geschwindigkeit anbelangt. Ich kann mir da kaum ein (realistisches) Szenario vorstellen, wo ein c-tor wirklich Geschwindigkeitsprobleme machen kann.</p>
<p>Ansonsten kann ich nur sagen, dass du hald von Fall zu Fall überlegen musst, was jetzt geeigneter ist. (Und mal nicht auf Geschwindigkeit achten). Sondern eher, wie es für den Programmierer/Leser ist. Also Handbarkeit, Sicherheit, Lesbarkeit usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559234</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:18:14 GMT]]></title><description><![CDATA[<p>Berufspenner schrieb:</p>
<blockquote>
<p>Ob nun &quot;call by value&quot; oder &quot;call by reference&quot; das richtige ist, diese Frage stellte sich nur, wenn man sich vorher sicher war, ob man einen einer Funktion übergeben Wert verändern möchte oder nicht.</p>
</blockquote>
<p>Nein, eben nicht. Referenzen haben abgesehen von der Möglichkeit zur Veränderbarkeit wie gesagt den Vorteil, dass grosse Objekte nicht kopiert werden müssen. Wieso sollte es sonst Const-Referenzen geben?</p>
<p>Und was die Geschwindigkeit angeht: Meistens hat man eh nicht so zeitkritische Bedingungen, dass man bei 10 Byte grossen Objekten überlegen muss, ob jetzt ein Call by Value oder Call by Reference von Vorteil ist. Ich würd mir einfach merken, Elementardatentypen sowie Typedefs von solchen und Enums zu kopieren, während grössere Datentypen wie Klassen als Referenz übergeben werden.</p>
<p>Und falls man doch derart mikrooptimieren muss, gibts ja wie gesagt noch Profiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559236</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:19:40 GMT]]></title><description><![CDATA[<p>Ok danke euch allen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Das hat mir weitergeholfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>lg c4f</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559237</guid><dc:creator><![CDATA[c4f]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:21:36 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Der c-tor wird in kaum einem Fall ein Problem werden, was die Geschwindigkeit anbelangt. Ich kann mir da kaum ein (realistisches) Szenario vorstellen, wo ein c-tor wirklich Geschwindigkeitsprobleme machen kann.</p>
</blockquote>
<p>Ich schon...</p>
<pre><code class="language-cpp">class Matrix
{
std::vector &lt; std::vector &lt; my::BigInt &gt; &gt; array;
/*etc*/
};
</code></pre>
<p>Is nat nur ein Bsp. und das BigInt soll andeuten, dass die Zahl an sich auch noch mal bissl mehr zu kopieren sein könnte als nen einfacher int...<br />
Klar ist das heutzutage üblicherweise zu vernachlässigen, aber auch nur, so lange man sich in nem rel. &quot;normalen&quot; Rahmen aufhält...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559240</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:21:36 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:21:59 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Berufspenner schrieb:</p>
<blockquote>
<p>Ob nun &quot;call by value&quot; oder &quot;call by reference&quot; das richtige ist, diese Frage stellte sich nur, wenn man sich vorher sicher war, ob man einen einer Funktion übergeben Wert verändern möchte oder nicht.</p>
</blockquote>
<p>Nein, eben nicht. Referenzen haben abgesehen von der Möglichkeit zur Veränderbarkeit wie gesagt den Vorteil, dass grosse Objekte nicht kopiert werden müssen. Wieso sollte es sonst Const-Referenzen geben.</p>
</blockquote>
<p>Stimmt, da hast du recht. Ich hab es gerade eher im Kleinen und nicht im Ganzen betrachtet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559241</guid><dc:creator><![CDATA[Berufspenner]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:28:38 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Is nat nur ein Bsp. und das BigInt soll andeuten, dass die Zahl an sich auch noch mal bissl mehr zu kopieren sein könnte als nen einfacher int...<br />
Klar ist das heutzutage üblicherweise zu vernachlässigen, aber auch nur, so lange man sich in nem rel. &quot;normalen&quot; Rahmen aufhält...</p>
<p>bb</p>
</blockquote>
<p>Ich habe nicht gesagt, dass es nicht auch sehr viel Zeit in Anspruch nehmen kann, sondern, dass ich mir keine realistisches Szenario vorstellen kann, wo das wirklich etwas ausmacht. Da hast du andere Probleme, als einen grossen c-tor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559249</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen benutzen on Mon, 04 Aug 2008 20:33:27 GMT]]></title><description><![CDATA[<p>Grundsätzlich sollte man sich nicht immer um solche (teilweise) Mikrooptimierungen Gedanken machen <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>
<p>Ich denke, mit der von mir geposteten Grundregel oben fährt man eigentlich gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Offtopic (sorry musste sein :D):</p>
<blockquote>
<p>drakon<br />
Mitglied</p>
<p>Benutzerprofil<br />
Anmeldungsdatum: 28.01.2008<br />
Beiträge: <strong>1337</strong></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1559254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559254</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:33:27 GMT</pubDate></item></channel></rss>