<?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[Call by: value oder ref?]]></title><description><![CDATA[<p>Hallo,<br />
was seht ihr als &quot;optimale&quot; Lösung bei der Parameterübergabe, bzw. was haltet Ihr in den meisten Fällen für sinnvoll?</p>
<p>Ein call by Value und so gut wie alles im Projekt mit values machen, oder so viel wie es geht mit Referenzen? Eventuell mit const. referenzen?</p>
<p>Gruß,<br />
Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236437/call-by-value-oder-ref</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 22:42:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236437.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Mar 2009 08:37:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 08:37:53 GMT]]></title><description><![CDATA[<p>Hallo,<br />
was seht ihr als &quot;optimale&quot; Lösung bei der Parameterübergabe, bzw. was haltet Ihr in den meisten Fällen für sinnvoll?</p>
<p>Ein call by Value und so gut wie alles im Projekt mit values machen, oder so viel wie es geht mit Referenzen? Eventuell mit const. referenzen?</p>
<p>Gruß,<br />
Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680223</guid><dc:creator><![CDATA[Andy2211]]></dc:creator><pubDate>Sun, 15 Mar 2009 08:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 08:48:29 GMT]]></title><description><![CDATA[<p>Hy Andy</p>
<p>Naja bei &quot;kleinen&quot; Variablen, sowas wie Int entscheide ganz einfach was dir besser gefällt, da ist es egal ob jetzt die 4 Byte Addresse oder die 4 Byte daten kopiert werden.</p>
<p>Bei größeren Variablen zB strukturen benutze am besten immer nur ein ByRef und wenn die Daten nicht verändert werden sollen, dann natürlich const ByRef. Da hier dann nur die Addresse und nicht die komplette Struktur mitkopiert werden muss und deswegen entsprechend schneller ist. Auserdem der Stack (ich glaub der wars nicht der Heap) ist immernoch ein begrenzter speicher, bei dem ich versuch so wenig wie möglich abzulegen.</p>
<p>Mfg Deep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680226</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Sun, 15 Mar 2009 08:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 10:00:09 GMT]]></title><description><![CDATA[<p>Hättest du die Forensuche benutzt, wärst du unter anderem auf <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-234683-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html" rel="nofollow">diesen Thread</a> gestossen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680253</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 10:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 10:55:03 GMT]]></title><description><![CDATA[<p>Aber ist es bei einer <strong>Referenz</strong> nicht so dass man davon im finalen ASM Code nix mehr sieht? Die Referenz ist doch nur für den Compiler, man greift halt von anderen Stellen auf die Originalvariablen zu...</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/1680292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680292</guid><dc:creator><![CDATA[Frage9]]></dc:creator><pubDate>Sun, 15 Mar 2009 10:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 11:36:47 GMT]]></title><description><![CDATA[<p>Frage9 schrieb:</p>
<blockquote>
<p>Aber ist es bei einer <strong>Referenz</strong> nicht so dass man davon im finalen ASM Code nix mehr sieht? Die Referenz ist doch nur für den Compiler, man greift halt von anderen Stellen auf die Originalvariablen zu...</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>
</blockquote>
<p>Ja. Bei x86 ASM wird eine Referenz praktisch in jedem Fall durch einen Pointer dargestellt. Einfach immer schön <code>const</code> -Referenzen benutzen, die interne Darstellung kann dir doch egal sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680314</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Sun, 15 Mar 2009 11:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 11:40:46 GMT]]></title><description><![CDATA[<p>Frage9 schrieb:</p>
<blockquote>
<p>Aber ist es bei einer <strong>Referenz</strong> nicht so dass man davon im finalen ASM Code nix mehr sieht? Die Referenz ist doch nur für den Compiler, man greift halt von anderen Stellen auf die Originalvariablen zu...</p>
</blockquote>
<p>Nein, normalerweise verhält sich eine Referenz wie ein eingeschränkter Zeiger.</p>
<p>Wenn du sowas hast, kann dir der Compiler das rausoptimieren, da es sich tatsächlich nur um einen Alias handelt.</p>
<pre><code class="language-cpp">Object&amp; Ref = MyNamespace::MyClass.GetElement(3).GetObject();
</code></pre>
<p>Aber bei Parameterübergaben wird mit grosser Wahrscheinlichkeit derselbe Assemblercode generiert wie mit einem Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680318</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 11:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 14:36:07 GMT]]></title><description><![CDATA[<p>Marc-O schrieb:</p>
<blockquote>
<p>Naja bei &quot;kleinen&quot; Variablen, sowas wie Int entscheide ganz einfach was dir besser gefällt, da ist es egal ob jetzt die 4 Byte Addresse oder die 4 Byte daten kopiert werden.</p>
</blockquote>
<p>Nur, dass es wenigsten mal einer sagt:<br />
Das ist quatsch - da nicht nur das Kopieren, sondern auch das De-Referenzieren zu beachten ist... Da der Compiler die Referenz bei einem Funktionsaufruf nicht rausoptimieren darf - er muss also 4 Byte (x86) kopieren und dann mind. einmal De-Referenzieren - das hört sich doch schon ein wenig doof an, wenn man im Gegensatz dazu &quot;nur 4B kopieren&quot; hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680416</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 15 Mar 2009 14:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 15:08:56 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Marc-O schrieb:</p>
<blockquote>
<p>Naja bei &quot;kleinen&quot; Variablen, sowas wie Int entscheide ganz einfach was dir besser gefällt, da ist es egal ob jetzt die 4 Byte Addresse oder die 4 Byte daten kopiert werden.</p>
</blockquote>
<p>Nur, dass es wenigsten mal einer sagt:<br />
Das ist quatsch - da nicht nur das Kopieren, sondern auch das De-Referenzieren zu beachten ist... Da der Compiler die Referenz bei einem Funktionsaufruf nicht rausoptimieren darf - er muss also 4 Byte (x86) kopieren und dann mind. einmal De-Referenzieren - das hört sich doch schon ein wenig doof an, wenn man im Gegensatz dazu &quot;nur 4B kopieren&quot; hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
</blockquote>
<p>im prinzip ist der punkt sowieso egal. wenn man ne referenz auf ein int übergibt, ist das eigentlich für einen ganz anderen anwendungsfall gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680426</guid><dc:creator><![CDATA[naja]]></dc:creator><pubDate>Sun, 15 Mar 2009 15:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 15:42:18 GMT]]></title><description><![CDATA[<p>naja schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>Marc-O schrieb:</p>
<blockquote>
<p>Naja bei &quot;kleinen&quot; Variablen, sowas wie Int entscheide ganz einfach was dir besser gefällt, da ist es egal ob jetzt die 4 Byte Addresse oder die 4 Byte daten kopiert werden.</p>
</blockquote>
<p>Nur, dass es wenigsten mal einer sagt:<br />
Das ist quatsch - da nicht nur das Kopieren, sondern auch das De-Referenzieren zu beachten ist... Da der Compiler die Referenz bei einem Funktionsaufruf nicht rausoptimieren darf - er muss also 4 Byte (x86) kopieren und dann mind. einmal De-Referenzieren - das hört sich doch schon ein wenig doof an, wenn man im Gegensatz dazu &quot;nur 4B kopieren&quot; hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
</blockquote>
<p>im prinzip ist der punkt sowieso egal. wenn man ne referenz auf ein int übergibt, ist das eigentlich für einen ganz anderen anwendungsfall gedacht.</p>
</blockquote>
<p>Japp - aber in dem Fall heißt die Alternative ja Pointer und nicht Call by Value...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680435</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 15 Mar 2009 15:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 15:44:58 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Nur, dass es wenigsten mal einer sagt</p>
</blockquote>
<p>Was denkst du, wieso ich den Link gepostet habe? <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>Da steht zum Beispiel auch, dass bei gewissen Objekten eine Zeiger-/Referenzübergabe die einzige Möglichkeit ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680437</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 15:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 16:00:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>Nur, dass es wenigsten mal einer sagt</p>
</blockquote>
<p>Was denkst du, wieso ich den Link gepostet habe? <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>Da steht zum Beispiel auch, dass bei gewissen Objekten eine Zeiger-/Referenzübergabe die einzige Möglichkeit ist.</p>
</blockquote>
<p>In dem Thread hab ich aber jz nicht soooo viel zu Call by Ref vs Call by Value gelesen... Da gabs imho bessere Threads - aber da ich zu faul zum Suchen war.. usw <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680440</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 15 Mar 2009 16:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Call by: value oder ref? on Sun, 15 Mar 2009 16:09:58 GMT]]></title><description><![CDATA[<p>Diese zwei Posts decken aber schon einen Grossteil der Thematik ab, findest du nicht? <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>drakon schrieb:</p>
<blockquote>
<p>Die Übergabe per Referenz lohnt sich überall, wo nicht gerade eingabaute Typen übergeben werden. Aber so Sachen, wie std::string, o.ä sollte in der Regel mittels Referenz übergeben werden. (Wenn nichts geändert werden soll const).</p>
</blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Als Faustregel kann man sich merken, dass man Built-In-Typen wie <code>int</code> , <code>bool</code> , <code>double</code> als Kopie übergeben kann, während Klassentypen als Const-Referenz übergeben werden. Bei kleinen Typen lohnt sich eine Übergabe nicht, da das Anlegen einer Referenz oder eines Zeigers etwa gleich lange dauert wie die Kopie und anschliessend noch die Dereferenzierungskosten dazu kommen. Bei grösseren Typen fängt es sich jedoch schnell zu lohnen an. Zudem können gewisse Objekte gar nicht kopiert werden, so zum Beispiel die C++-Streams.</p>
</blockquote>
<p>Wie auch immer, nichts hindert den Threadersteller daran, noch mehr Informationen zu suchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680442</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 16:09:58 GMT</pubDate></item></channel></rss>