<?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 wert als inout parameter die 2. Funktion übergeben]]></title><description><![CDATA[<pre><code class="language-cpp">int retInt()
{
   int i = 10;
   return i;
}

void DoWith(int&amp; inoutPara)
{
   inoutPara ++;
}

int main()
{
   DoWith(retInt()); //error C2664: 'DoWith' : 
                     //cannot convert parameter 1 
                     //from 'int' to 'int &amp;'
   int j = retInt();
   DoWith(j);
   int k = 100;
   DoWith(k++); //error C2664: 'DoWith' : 
                //cannot convert parameter 1 
               //from 'int' to 'int &amp;'
   DoWith(++k); // work fine

   return 0;
}
</code></pre>
<p>ist es compiler abhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150470/return-wert-als-inout-parameter-die-2-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 16:10:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150470.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jun 2006 20:36:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 20:36:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int retInt()
{
   int i = 10;
   return i;
}

void DoWith(int&amp; inoutPara)
{
   inoutPara ++;
}

int main()
{
   DoWith(retInt()); //error C2664: 'DoWith' : 
                     //cannot convert parameter 1 
                     //from 'int' to 'int &amp;'
   int j = retInt();
   DoWith(j);
   int k = 100;
   DoWith(k++); //error C2664: 'DoWith' : 
                //cannot convert parameter 1 
               //from 'int' to 'int &amp;'
   DoWith(++k); // work fine

   return 0;
}
</code></pre>
<p>ist es compiler abhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079165</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 16 Jun 2006 20:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 20:57:04 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>ist es compiler abhängig?</p>
</blockquote>
<p>Nein das ist schon alles richtig so wie es der Compiler macht.</p>
<p>Frage -&gt; Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079168</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 16 Jun 2006 20:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 21:00:42 GMT]]></title><description><![CDATA[<p>dann Frage:</p>
<pre><code class="language-cpp">DoWith(retInt()); //error C2664: 'DoWith' :
                     //cannot convert parameter 1
                     //from 'int' to 'int &amp;'
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">DoWith(k++); //error C2664: 'DoWith' : 
                //cannot convert parameter 1 
               //from 'int' to 'int &amp;'
</code></pre>
<p>wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079171</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 16 Jun 2006 21:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 21:05:00 GMT]]></title><description><![CDATA[<p>Die Fehlermeldungen sind wirklich schlecht, das stimmt. Das hier sagt der g++, sollte dann auch klar sein:</p>
<blockquote>
<p>code.cpp: In function 'int main()':<br />
code.cpp:14: error: invalid initialization of non-const reference of type 'int&amp;' from a temporary of type 'int'<br />
code.cpp:7: error: in passing argument 1 of 'void DoWith(int&amp;)'<br />
code.cpp:20: error: invalid initialization of non-const reference of type 'int&amp;' from a temporary of type 'int'<br />
code.cpp:7: error: in passing argument 1 of 'void DoWith(int&amp;)'</p>
</blockquote>
<p>Temporarys können nicht an non-const Referenzen gebunden werden (ich hoffe das stimmt so).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079174</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 16 Jun 2006 21:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 21:09:19 GMT]]></title><description><![CDATA[<p>warum</p>
<pre><code class="language-cpp">DoWith(++k); // work fine
</code></pre>
<p>aber nicht</p>
<pre><code class="language-cpp">DoWith(k++);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079178</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 16 Jun 2006 21:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 21:12:13 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>warum</p>
<pre><code class="language-cpp">DoWith(++k); // work fine
</code></pre>
<p>aber nicht</p>
<pre><code class="language-cpp">DoWith(k++);
</code></pre>
</blockquote>
<p>wenn du den Unterschied zwischen ++k und k++ kennst, sollte das klar sein: ++k braucht kein temporäres Objekt erstellen, sondern nur eine referenz auf k zurückgeben. k++ hingegen muss dies tun.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079180</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 16 Jun 2006 21:12:13 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 21:16:14 GMT]]></title><description><![CDATA[<p>Weil ++k zuerst k erhöht und dann wieder eine Referenz auf k zurück gibt.</p>
<p>Bei k++ wird aber k erhöht und dann eine Kopie des alten k zurück gegeben, genau wie bei deiner Funktion retInt bekommst du hier ein Temporary.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079183</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 16 Jun 2006 21:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 22:35:23 GMT]]></title><description><![CDATA[<blockquote>
<p>Bei k++ wird aber k erhöht und dann eine Kopie des alten k zurück gegeben</p>
</blockquote>
<p>wieso ist es nicht möglich ein referenz zurückzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079211</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 16 Jun 2006 22:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 22:38:45 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<blockquote>
<p>Bei k++ wird aber k erhöht und dann eine Kopie des alten k zurück gegeben</p>
</blockquote>
<p>wieso ist es nicht möglich ein referenz zurückzugeben.</p>
</blockquote>
<p>Eine Referenz auf was? Auf das alte k? Das ist doch möglich: Nämlich mit ++k. Oder was meinst du jetzt?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079213</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 16 Jun 2006 22:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to return wert als inout parameter die 2. Funktion übergeben on Fri, 16 Jun 2006 22:51:06 GMT]]></title><description><![CDATA[<p>Weil der Rückgabewert, wie bereits gesagt, eine temporäre Variable ist. Die Implementierung könnte z.B. so aussehen:</p>
<pre><code class="language-cpp">int Postincrement(int &amp;value) {
  int tmp = value;
  value += 1;
  return tmp;
}
</code></pre>
<p>Dadurch würde bei einer Zuweisung der alte Wert zurückgegeben und value erhöht werden. tmp wird nach Beendigung der Funktion zerstört, wenn du dann eine Referenz auf tmp zurückgibst, würdest du dich auf ein ungültiges Objekt beziehen. Die Initialisierung einer Variablen mit dem Rückgabewert mit einer Referenz von tmp ist somit undefiniert. Also bleibt dir nur übrig eine Kopie zurückzugeben.</p>
<p>Die Präfix-Variante hingegen etwa so:</p>
<pre><code class="language-cpp">int&amp; Praeincrement(int &amp;value) {
  return value+=1;
}
</code></pre>
<p>Hier wird value erhöht. Da hier keine neue Variable angelegt wird, kann eine Referenz zurückgegeben werden, diese bezieht sich dann auf die an Praeincrement übergebene Variable und somit auf ein Objekt, welches auch nach verlassen der Funktion gültig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079221</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 16 Jun 2006 22:51:06 GMT</pubDate></item></channel></rss>