<?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[Was gibt die Funktion zurück?]]></title><description><![CDATA[<p>Ich habe eine Funktion, die folgendermaßen aufgerufen wird:</p>
<pre><code class="language-cpp">World.getPlayer(1)-&gt;Start();
</code></pre>
<pre><code class="language-cpp">vector&lt;Player&gt; v_player;

Player &amp;getPlayer(int index)
{
   if (v_player[index].getName() == &quot;Peter&quot;)
     return &amp;v_player[index]

   //return NULL;
}
</code></pre>
<p>Es wird bei Aufruf überprüft, ob der Spieler mit angegebenem Index &quot;Peter&quot; heißt. Wenn ja, wird eine Referenz auf den Spieler zurückgegeben und daraufhin Start() ausgeführt.</p>
<p>Nun soll, wenn die Bedingung false ist, dass eben nichts passiert.<br />
Wenn ich den Kommentar auskommentiere (und es keinen &quot;Peter&quot; gibt), bekomme ich einen Runtime-Fehler.<br />
Lasse ich es so, passiert nichts.</p>
<p>Ich möchte einfach nur die Warnung &quot;Nicht alle Steuerelementpfade geben einen Wert zurück.&quot; beseitigen.<br />
Was genau wird zurückgegeben, wenn ich selbst kein return angebe?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279090/was-gibt-die-funktion-zurück</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 19:11:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279090.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Dec 2010 00:02:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 00:02:25 GMT]]></title><description><![CDATA[<p>Ich habe eine Funktion, die folgendermaßen aufgerufen wird:</p>
<pre><code class="language-cpp">World.getPlayer(1)-&gt;Start();
</code></pre>
<pre><code class="language-cpp">vector&lt;Player&gt; v_player;

Player &amp;getPlayer(int index)
{
   if (v_player[index].getName() == &quot;Peter&quot;)
     return &amp;v_player[index]

   //return NULL;
}
</code></pre>
<p>Es wird bei Aufruf überprüft, ob der Spieler mit angegebenem Index &quot;Peter&quot; heißt. Wenn ja, wird eine Referenz auf den Spieler zurückgegeben und daraufhin Start() ausgeführt.</p>
<p>Nun soll, wenn die Bedingung false ist, dass eben nichts passiert.<br />
Wenn ich den Kommentar auskommentiere (und es keinen &quot;Peter&quot; gibt), bekomme ich einen Runtime-Fehler.<br />
Lasse ich es so, passiert nichts.</p>
<p>Ich möchte einfach nur die Warnung &quot;Nicht alle Steuerelementpfade geben einen Wert zurück.&quot; beseitigen.<br />
Was genau wird zurückgegeben, wenn ich selbst kein return angebe?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996457</guid><dc:creator><![CDATA[Dbof]]></dc:creator><pubDate>Sun, 19 Dec 2010 00:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 00:11:50 GMT]]></title><description><![CDATA[<p>So wie es aussieht, willst du doch einen Zeiger zurück gekommen, oder?<br />
Dann ändere den Rückgabewert entsprechend:</p>
<pre><code class="language-cpp">Player* getPlayer(int index)
{
   if (v_player[index].getName() == &quot;Peter&quot;)
     return &amp;v_player[index]

   return NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1996461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996461</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Sun, 19 Dec 2010 00:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 01:47:46 GMT]]></title><description><![CDATA[<p>Referenzen können nicht <code>NULL</code> sein. Benutze entweder wie gezeigt Zeiger oder wirf im Fehlerfall eine Exception. Eine dritte Möglichkeit wäre eine Funktion mit Output-Parameter, der nur im Erfolgsfall benutzt wird:</p>
<pre><code class="language-cpp">bool getPlayer(int index, Player&amp; out);
</code></pre>
<p>Übrigens: Für eine Get-Funktion sollte <code>getPlayer()</code> konstant sein. Dann findest du vielleicht heraus, dass der <code>std::map::operator[]</code> nicht mehr anwendbar ist, weil er manchmal Objekte einfügt. Die Alternative wäre <code>std::map::find()</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996468</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Dec 2010 01:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 13:06:06 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>So wie es aussieht, willst du doch einen Zeiger zurück gekommen, oder?<br />
Dann ändere den Rückgabewert entsprechend:</p>
</blockquote>
<p>Das war ein Tippfehler von mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Ich gebe ja schließlich einen Zeiger auf das Element zurück.</p>
<p>Das Problem ist ja, dass wenn in der Funktion kein return ausgeführt wird, dass auch kein Laufzeitfehler kommt. Demnach passiert einfach nichts.<br />
Wird hingegen etwas zurückgegeben, bekomme ich Fehler. Die Hauptfrage war, was von der Funktion im Endeffekt zurückgegeben wird, wenn kein return ausgeführt wird?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Referenzen können nicht <code>NULL</code> sein. Benutze entweder wie gezeigt Zeiger oder wirf im Fehlerfall eine Exception. Eine dritte Möglichkeit wäre eine Funktion mit Output-Parameter, der nur im Erfolgsfall benutzt wird:</p>
<pre><code class="language-cpp">bool getPlayer(int index, Player&amp; out);
</code></pre>
</blockquote>
<p>Das Problem hierbei ist, dass die Funktion als Methode aufgerufen wird, und vom Rückgabewert eine andere Methode ausführt:</p>
<pre><code class="language-cpp">World.getPlayer(1)-&gt;Start();
</code></pre>
<p>Hierbei möchte ich einfach, dass wenn die Funktion einen Fehler hervorruft, dass dann oberer Code nicht ausgeführt wird. Genau so passiert es im Moment, weil ich keinen Rückgabewert angebe. Hier ein mögliches Beispiel:</p>
<blockquote>
<p>//Bei &quot;return NULL;&quot;<br />
World.NULL-&gt;Start(); //Gibt natürlich einen Fehler</p>
<p>//Bei keinem return<br />
World.<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="😕"
    />-&gt;Start(); //Gibt keinen Fehler, nichts passiert</p>
</blockquote>
<p>btw..<br />
AFAIK können Referenzen außerdem NULL sein (NULL-Zeiger), sie können nur nicht weiterverwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996593</guid><dc:creator><![CDATA[Dbof]]></dc:creator><pubDate>Sun, 19 Dec 2010 13:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 13:28:41 GMT]]></title><description><![CDATA[<p><code>I</code> : einen dummy-Player erstellen, der beim Aufruf von Start nichts macht.</p>
<pre><code class="language-cpp">return &amp;player::dummy; // player::dummy.start() macht nichts
</code></pre>
<p><code>II</code> : ein Funktionsobjekt übergeben, die für dich etwas aufruft, wenn Erfolg</p>
<pre><code class="language-cpp">template &lt;class UnaryOperator&gt;
bool doPlayer(int index, UnaryOperator fnc)
{
   if (v_player[index].getName() == &quot;Peter&quot;) {
      fnc(v_player[index]);
      return true;
   }
   return false;
}

World.doPlayer(1, std::mem_fun(&amp;player::start));
</code></pre>
<p><code>III</code> : Ganz normal, wie man es in C machen würde:</p>
<pre><code class="language-cpp">player *p;
if ((p = world.get_player(1))) p-&gt;start()
</code></pre>
<p><code>IV</code> : Ganz normal, wie man es in C++ machen würde:</p>
<pre><code class="language-cpp">world::player_iterator it = world.find_player(1);
if (it != world::player_npos) p-&gt;start()
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1996616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996616</guid><dc:creator><![CDATA[doof]]></dc:creator><pubDate>Sun, 19 Dec 2010 13:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 13:29:36 GMT]]></title><description><![CDATA[<p>Dbof schrieb:</p>
<blockquote>
<p>btw..<br />
AFAIK können Referenzen außerdem NULL sein (NULL-Zeiger), sie können nur nicht weiterverwendet werden.</p>
</blockquote>
<p>Zeiger != Referenzen.<br />
Referenzen können nicht ungültig sein. Zumindest nicht direkt, man kann es natürlich erzwingen, aber das benötigt ungeschicktes Verhalten.</p>
<pre><code class="language-cpp">int* n = new int(2);
int&amp; rn = *n;
delete n;
std::cout &lt;&lt; rn; // autsch
</code></pre>
<p>0 kann aber eine Referenz nicht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996617</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 19 Dec 2010 13:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 13:33:11 GMT]]></title><description><![CDATA[<p>C++-Standard schrieb:</p>
<blockquote>
<p>Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the &quot;object&quot; obtained by dereferencing a null pointer, which causes undefined behavior.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1996618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996618</guid><dc:creator><![CDATA[n2356]]></dc:creator><pubDate>Sun, 19 Dec 2010 13:33:11 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 14:03:28 GMT]]></title><description><![CDATA[<p>Mal eine Frage an die Experten:</p>
<p>Dbof schrieb:</p>
<blockquote>
<p>//Bei &quot;return NULL;&quot;<br />
World.NULL-&gt;Start(); //Gibt natürlich einen Fehler</p>
<p>//Bei keinem return<br />
World.<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="😕"
    />-&gt;Start(); //Gibt keinen Fehler, nichts passiert</p>
</blockquote>
<p>Wieso gibt der untere Aufruf keinen Fehler? Was wird in dem Fall zurückgegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996634</guid><dc:creator><![CDATA[Meloen]]></dc:creator><pubDate>Sun, 19 Dec 2010 14:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 14:19:34 GMT]]></title><description><![CDATA[<p>Dbof schrieb:</p>
<blockquote>
<p>Das Problem ist ja, dass wenn in der Funktion kein return ausgeführt wird, dass auch kein Laufzeitfehler kommt.</p>
</blockquote>
<p>Dann schalte doch mal die Compiler-Warnungen auf eine höhere Stufe. Bei einer Funktion wie dieser hier:</p>
<pre><code class="language-cpp">int silly(int a) 
{
  if (a==3) return 42;
}
</code></pre>
<p>ruft ein Aufruf wie silly(5) undefiniertes Verhalten hervor. Wenn ich mich richtig erinnere sieht der Standardtext sinngemäß so aus: &quot;Flowing off the end of a function with a non-void return type without a return statement invokes undefined behaviour&quot;. Bin grad zu Faul, Kapitel und Vers rauszusuchen. Das heißt, dass es Für Deine Frage keine Antwort gibt. Es kann alles mögliche passieren. Das Verhalten ist eben nicht definiert. Du solltest es deswegen vermeiden.</p>
<p>So etwas ist nur bei der main-Funktion erlaubt. Der Effekt ist dann äquivalent zu einem return EXIT_SUCCESS;</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996639</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 19 Dec 2010 14:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt die Funktion zurück? on Sun, 19 Dec 2010 14:21:07 GMT]]></title><description><![CDATA[<ol start="2">
<li>Buch Mose, Kapitel 6.6.3, Vers 2 schrieb:</li>
</ol>
<blockquote>
<p>Flowing off the end of a function is equivalent to a <code>return</code> with no value; this results in undefined behavior in a value-returning function.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1996643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996643</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 19 Dec 2010 14:21:07 GMT</pubDate></item></channel></rss>