<?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[Parameter und Rückgabetypen von Operatoren]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Wenn es ums Thema Operatoren geht, so ist es des öfteren recht schwer festzulegen, welche Rückgabetypen und Parameter ein Operator haben sollte.<br />
Beispielsweise habe ich in meinem Buch nun gelesen, dass der Zuweisungsoperator am besten einen Referenz auf *this zurückgeben sollte.<br />
Allerdings funktioniert das ganze ja auch, wenn ich einfach ein normales Objekt nehmen.<br />
Es ist doch egal ob ich eine konstante Referenz übergebe oder gleich eine Kopie des Objektes.<br />
Bei den anderen Operatoren ist es ähnlich.</p>
<p>Kennt jemand eine Seite oder kann mir jemand die Regeln für die einzelnen Operatoren nennen?<br />
Warum gibt der Zuweisungsoperator nicht einfach ein Objekt zurück?<br />
Wie entscheide ich mich bei den Parametern- Referenzen oder normale Objekte?</p>
<p>Es wäre nett, wenn mir da jemand helfen könnte, weil mein Buch darauf irgendwie nur sehr eingeschränkte Informationen gibt.</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204288/parameter-und-rückgabetypen-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:47:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204288.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Feb 2008 09:12:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 09:17:32 GMT]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Wenn es ums Thema Operatoren geht, so ist es des öfteren recht schwer festzulegen, welche Rückgabetypen und Parameter ein Operator haben sollte.<br />
Beispielsweise habe ich in meinem Buch nun gelesen, dass der Zuweisungsoperator am besten einen Referenz auf *this zurückgeben sollte.<br />
Allerdings funktioniert das ganze ja auch, wenn ich einfach ein normales Objekt nehmen.<br />
Es ist doch egal ob ich eine konstante Referenz übergebe oder gleich eine Kopie des Objektes.<br />
Bei den anderen Operatoren ist es ähnlich.</p>
<p>Kennt jemand eine Seite oder kann mir jemand die Regeln für die einzelnen Operatoren nennen?<br />
Warum gibt der Zuweisungsoperator nicht einfach ein Objekt zurück?<br />
Wie entscheide ich mich bei den Parametern- Referenzen oder normale Objekte?</p>
<p>Es wäre nett, wenn mir da jemand helfen könnte, weil mein Buch darauf irgendwie nur sehr eingeschränkte Informationen gibt.</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447426</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Fri, 01 Feb 2008 09:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 10:36:32 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Es ist doch egal ob ich eine konstante Referenz übergebe oder gleich eine Kopie des Objektes.</p>
</blockquote>
<p>Nö. Erstens ist der Speicheraufwand ein anderer und je nach Konstruktor kann da ganz was komisches bei passieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447456</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 01 Feb 2008 10:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 10:47:44 GMT]]></title><description><![CDATA[<p>Es ist anfangs nicht leicht, aber man muss sich erstmal klar machen, was der Operator eigentlich genau macht.<br />
Die einfachen wie + * - / % verändern die Objekte selbst ja nicht. z.B.</p>
<pre><code class="language-cpp">d = a = b + c;
</code></pre>
<p>c wird zu b addiert, aber der Wert von b selber wird ja nicht geändert.<br />
Also muss ein temporäres Objekt her, welches das Ergebnis beinhaltet und zurückgegeben wird.<br />
c wird auch nicht geändert, also wird es per const Referenz übergeben.</p>
<p>Warum wird c nicht als Kopie übergeben?<br />
Könnte man auch machen, aber bei komplexeren Objekten wird das kopieren aufwendiger -&gt; Performance.<br />
Warum sollte man sich unnötige Kopien nicht ersparen!?</p>
<p>Wenn der Zuweisungsoperator nichts zurückliefern würde, dann könnte ich die Zuweisung an d (wie oben) nicht vornehmen.<br />
Also sollte hier auch eine konstante Referenz zurückgegeben werden, daher return *this.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447464</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Fri, 01 Feb 2008 10:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 11:20:16 GMT]]></title><description><![CDATA[<p>Airdamn schrieb:</p>
<blockquote>
<p>Wenn der Zuweisungsoperator nichts zurückliefern würde, dann könnte ich die Zuweisung an d (wie oben) nicht vornehmen.<br />
Also sollte hier auch eine konstante Referenz zurückgegeben werden, daher return *this.</p>
</blockquote>
<p>Die Rückgabe einer Referenz ist richtig, diese sollte allerdings nicht konstant sein. Das entspricht dem Verhalten des normalen Operators ebenso dem wie der vom Compiler deklarierten Overloads. Zudem ist dies für Standardcontainer-kompatible Typen vorgeschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447480</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Feb 2008 11:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 11:22:59 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Airdamn schrieb:</p>
<blockquote>
<p>Wenn der Zuweisungsoperator nichts zurückliefern würde, dann könnte ich die Zuweisung an d (wie oben) nicht vornehmen.<br />
Also sollte hier auch eine konstante Referenz zurückgegeben werden, daher return *this.</p>
</blockquote>
<p>Die Rückgabe einer Referenz ist richtig, diese sollte allerdings nicht konstant sein. Das entspricht dem Verhalten des normalen Operators ebenso dem wie der vom Compiler deklarierten Overloads. Zudem ist dies für Standardcontainer-kompatible Typen vorgeschrieben.</p>
</blockquote>
<p>Ok, dann lassen wir das const an der Stelle weg...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447482</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Fri, 01 Feb 2008 11:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 11:27:54 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Es ist doch egal ob ich eine konstante Referenz übergebe oder gleich eine Kopie des Objektes.<br />
Bei den anderen Operatoren ist es ähnlich.</p>
</blockquote>
<p>Nein...</p>
<p>Wenn ich eine Funktion/Methode/Operator habe sollten Parameter sofern nicht etwas dagagen spricht (Wie NULL-Werte oder Änderungen) immer:<br />
a) Bei integralen Datentypen als Wert (Call by Value)<br />
b) Bei Klassen als konstante Referent (Call by const Referenz) übergeben werden</p>
<p>Warum?</p>
<p>Nehmen wir mal eine Klasse A an:</p>
<pre><code class="language-cpp">void foo(A value) &lt;== Aufruf des Kopierkonstruktors
void foo(const A&amp; value) &lt;== Hier passiert nichts mit value
</code></pre>
<p>Das an sich mag noch nicht problematisch klingen. Nun ist es aber so das einerseits der Aufruf in einer Schleife liegen könnte und sich das Kopieren summiert oder das A entweder nicht kopierbar (z.B. private deklarierter Kopierkonstruktor) oder die Kopie aufwendig ist.<br />
Man sollte zwar niemals vorträglich optimieren, aber auch niemals vorträglich Code absichtlich langsamer oder fehleranfälliger als nötig bauen (z.B. könnte der Kopierkonstruktor auch eine Exception auslösen...).</p>
<p>Damit sollte das Thema schon mal erklärt sein.</p>
<p>Zum zweiten:<br />
Ob man ein Objekt oder eine Referenz auf sich selbst zurückgibt ist bei Operatoren auch ziemlich klar:</p>
<p>1. Orientiere dich immer an dem was für einen Integer gilt.<br />
2. Kopie oder Selbstreferenz immer zurückgeben wenn der Operator verkettet werden kann (z.B. +) und dabei gleiche Typen erwartet werden (Bei dem Operator! z.B. erwartet man im Gegensatz wie + als Rückgabe ein bool, nicht etwas des gleichen Typen)<br />
3. Selbstreferenz wird bei einer direkten Änderung an sich selbst zurückgeliefert (+=)<br />
4. Kopien werden immer zurückgegeben wenn entweder das Objekt nicht verändert wird (+) oder die Änderung erst nach der Rückgabe sichtbar wird (i++; Hier wird die Kopie des alten Wertes zurückgegeben, die Änderung erfolgt aber auf sich selbst)</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447485</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 01 Feb 2008 11:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter und Rückgabetypen von Operatoren on Fri, 01 Feb 2008 14:51:27 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>Vielen Dank für die ausführlichen Antworten- das mit der Performance hätte ich auch selbst raffen können <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>bis dann</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447643</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Fri, 01 Feb 2008 14:51:27 GMT</pubDate></item></channel></rss>