<?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[Fragen zu Referenzen und Return]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin momentan am Erlernen von C++ und habe hier noch zwei Fragen an euch:</p>
<p>- Gibt es eine Möglichkeit, mit &quot;return&quot; oder einer anderen Anweisung mehrere Werte einer Funktion zum Aufrufer zurückzugeben?</p>
<p>- Bin ich richtig der Annahme, dass eine Referenz keinen Speicher benötigt? Weil eine Referenz &quot;zeigt&quot; ja direkt auf die Variable und speichert keine Adressen.</p>
<p>Danke schon im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261734/fragen-zu-referenzen-und-return</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 03:47:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261734.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Feb 2010 09:45:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 09:45:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin momentan am Erlernen von C++ und habe hier noch zwei Fragen an euch:</p>
<p>- Gibt es eine Möglichkeit, mit &quot;return&quot; oder einer anderen Anweisung mehrere Werte einer Funktion zum Aufrufer zurückzugeben?</p>
<p>- Bin ich richtig der Annahme, dass eine Referenz keinen Speicher benötigt? Weil eine Referenz &quot;zeigt&quot; ja direkt auf die Variable und speichert keine Adressen.</p>
<p>Danke schon im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859930</guid><dc:creator><![CDATA[Miness]]></dc:creator><pubDate>Tue, 23 Feb 2010 09:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 09:48:48 GMT]]></title><description><![CDATA[<ol>
<li>
<p>Mehrere Werte kann man nicht zurückgeben. Dafür musst du Werte per Referenz/Zeiger als Parameter mitgeben, diese werden dann von der Funktion verändert.</p>
</li>
<li>
<p>Keinen Speicher können Referenz/Zeiger nicht brauchen, denn ohne Seicher könnte man doch auch keine Adresse speichern, oder? <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="😉"
    /><br />
Aber der Speicherverbrauch ist sehr gering.</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1859933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859933</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Tue, 23 Feb 2010 09:48:48 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 09:48:52 GMT]]></title><description><![CDATA[<p>Per return kannst du nur eine Variable zurückgeben. Dies kann aber auch eine Liste oder sonstige Formen von Containern oder komplexen Strukturen sein.</p>
<p>Eine recht übliche Methode ist es aber auch nur einen Statuswerd zurückzugeben und die zu füllenden Variablen als Referenzen oder Pointer übergeben zu bekommen und diese zu verändern.</p>
<p>Zum Beispiel:</p>
<pre><code class="language-cpp">bool convertWhateverToSthelseAndStuff(const WhatEver &amp;whatever, Sthelse &amp;blupp, Stuff &amp;stuff){
  // convert convert convert
  return success;
}
</code></pre>
<p>Referenzen sind im Grunde auch nur Pointer und belegen sizeof(int*) was in etwa ein int sein dürfte. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1859934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859934</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 23 Feb 2010 09:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 09:50:42 GMT]]></title><description><![CDATA[<p>Miness schrieb:</p>
<blockquote>
<p>- Gibt es eine Möglichkeit, mit &quot;return&quot; oder einer anderen Anweisung mehrere Werte einer Funktion zum Aufrufer zurückzugeben?</p>
</blockquote>
<p>Ja, es gibt mehrere Möglichkeiten, hier ein paar davon:</p>
<ul>
<li><code>std::pair</code> bzw. <code>boost::tuple</code> zum Zusammenfassen mehrerer Werte</li>
<li>eigene Klasse zurückgeben, die Werte zusammenfasst</li>
<li>Output-Parameter benutzen</li>
</ul>
<p>Miness schrieb:</p>
<blockquote>
<p>- Bin ich richtig der Annahme, dass eine Referenz keinen Speicher benötigt? Weil eine Referenz &quot;zeigt&quot; ja direkt auf die Variable und speichert keine Adressen.</p>
</blockquote>
<p>Das stimmt nur bedingt. In vielen Situationen kannst du dir eine Referenz wie ein eingeschränkter Zeiger vorstellen (automatische Dereferenzierung, kein Nullwert, keine eigene Adresse, konstant). Wenn du zum Beispiel eine Referenz an eine Funktion übergibst, braucht die Referenz Speicher, da sie ja eine Adresse (die des referenzierten Objekts) speichern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859935</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Feb 2010 09:50:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 10:20:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten!<br />
Um Werte zurückzugeben habe ich erst gar nicht an Zeiger und Referenzen gedacht. Aber so funktionierts natürlich auch, obwohl ja auf diese Weise die Variablen direkt verändert werden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Was meinst du mit Output-Parameter?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17700">@Fellhuhn</a>: Wenn ich den Statuswert &quot;success&quot; zurückgebe weiss der Aufrufer, dass die Funktion erfolgreich durchgelaufen ist? Verstehe ich das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859946</guid><dc:creator><![CDATA[Miness]]></dc:creator><pubDate>Tue, 23 Feb 2010 10:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 10:34:30 GMT]]></title><description><![CDATA[<p>Jenachdem wie du das machst.</p>
<p>Ich hab hier zB gerade eine Funktion die Lat/Lon-Coordinaten in Bildschirmkoordinaten umwandelt. Alle Koordinaten (Lat/Lon und x/y) werden als Referenzen übergeben und der Rückgabewert zeigt mir ob die Umwandlung erfolgreich war. Der Aufruf ist dann in etwa:</p>
<pre><code class="language-cpp">if (convertLatLonToXY(coord.lat, coord.lon, screenX, screenY))
{
  // erfolgsfall
}else{
  // fehlermeldung, rest abbrechen
}
</code></pre>
<p>Da es dein Code ist, ist das natürlich deine Entscheidung. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1859956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859956</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 23 Feb 2010 10:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 10:43:32 GMT]]></title><description><![CDATA[<p>Okay, alles klar! Wieder etwas dazugelernt. <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="😉"
    /><br />
Aber eine Funktion sollte ja eigentlich immer funktionieren, sonst würde der Compiler das ja bemerken und eine Fehlermeldung ausgeben. Ausser man prüft innerhalb der Funktion dann auch, unter welchen Bedingungen &quot;success&quot; zurückgegeben wird. Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859961</guid><dc:creator><![CDATA[Miness]]></dc:creator><pubDate>Tue, 23 Feb 2010 10:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 10:50:58 GMT]]></title><description><![CDATA[<p>In C++ gibt es noch den Weg von Exceptions. Damit kann man den Rückgabetypen der Funktion für Daten nutzen. Aber je nachdem ist Fellhuhns Ansatz praktischer.</p>
<p>Miness schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Was meinst du mit Output-Parameter?</p>
</blockquote>
<p>Mit Output-Parameter meinte ich Funktionsparameter (Zeiger oder Referenzen), die für Ausgabewerte der Funktion verwendet werden. Die Funktion speichert ihre Ergebnisse also dort.</p>
<p>Miness schrieb:</p>
<blockquote>
<p>Aber eine Funktion sollte ja eigentlich immer funktionieren, sonst würde der Compiler das ja bemerken und eine Fehlermeldung ausgeben.</p>
</blockquote>
<p>Naja, je nachdem kann die Funktion eben eine angeforderte Aufgabe nicht lösen. Zum Beispiel eine singuläre Matrix zu invertieren. Oder wenn externe Daten angefordert werden müssen, die nicht vorhanden sind (z.B. Dateizugriff). Dann muss dem Aufrufer auf eine Weise mitgeteilt werden, dass er kein erwartetes Resultat erhält. Wobei es je nach Situation auch angebracht sein kann, Assertions zu verwenden, da es sich bei falschen Argumenten um Programmierfehler handelt.</p>
<p>Miness schrieb:</p>
<blockquote>
<p>Ausser man prüft innerhalb der Funktion dann auch, unter welchen Bedingungen &quot;success&quot; zurückgegeben wird. Oder?</p>
</blockquote>
<p>Ja, genau so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859972</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Feb 2010 10:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 11:14:25 GMT]]></title><description><![CDATA[<p>Miness schrieb:</p>
<blockquote>
<p>Okay, alles klar! Wieder etwas dazugelernt. <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="😉"
    /><br />
Aber eine Funktion sollte ja eigentlich immer funktionieren, sonst würde der Compiler das ja bemerken und eine Fehlermeldung ausgeben. Ausser man prüft innerhalb der Funktion dann auch, unter welchen Bedingungen &quot;success&quot; zurückgegeben wird. Oder?</p>
</blockquote>
<p>Bei meinem Beispiel würde false zurückgegeben werden, wenn:<br />
a) Die Lat/Lon-Werte nicht gültig wären<br />
b) Das Mappen auf Bildschirmkoordinaten nicht möglich ist, zum Beispiel weil der Punkt auf der anderen Seite des Planeten liegt.</p>
<p>Ein Fall für Exceptions wäre da zB wenn der Algorithmus noch gar nicht angesprochen werden kann, weil er nicht initialisiert wurde oder keine gültigen Daten vorliegen etc. Also alles was wirklich Ausnahmen (Exceptions) sein sollten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859991</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 23 Feb 2010 11:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 12:05:59 GMT]]></title><description><![CDATA[<p>Okay, noch einmal danke für eure Ausführungen!<br />
Jetzt weiss ich auch, für was Funktionen sonst noch verwendet werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860019</guid><dc:creator><![CDATA[Miness]]></dc:creator><pubDate>Tue, 23 Feb 2010 12:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Referenzen und Return on Tue, 23 Feb 2010 13:28:10 GMT]]></title><description><![CDATA[<p>Zu dem Return gibt es schon einen Thread, vielleicht ist etwas für dich dabei:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1855253-and-highlight-is-.html#1855253" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1855253-and-highlight-is-.html#1855253</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860061</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Tue, 23 Feb 2010 13:28:10 GMT</pubDate></item></channel></rss>