<?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[operator+ (nightly build)]]></title><description><![CDATA[<p>hi,</p>
<p>sollte ich eher</p>
<pre><code class="language-cpp">zahl operator+(const zahl&amp;)
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">const zahl&amp; operator+(const zahl&amp;)
</code></pre>
<p>nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129927/operator-nightly-build</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:19:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129927.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2005 00:23:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 00:23:22 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>sollte ich eher</p>
<pre><code class="language-cpp">zahl operator+(const zahl&amp;)
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">const zahl&amp; operator+(const zahl&amp;)
</code></pre>
<p>nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944611</guid><dc:creator><![CDATA[m3dus4]]></dc:creator><pubDate>Sun, 18 Dec 2005 00:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 00:26:48 GMT]]></title><description><![CDATA[<p>Ersteres, bei Zweiterem würdest du ja eine Referenz auf ein lokales Objekt zurückgeben und noch dazu ein konstantes was die Verkettung von +-Operatoren verbieten würde.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944614</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 18 Dec 2005 00:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 00:33:30 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39474.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39474.html</a></p>
<p>richtig richtig ist folglich keine der varianten, sondern:</p>
<pre><code class="language-cpp">zahl operator+(const zahl&amp;, const zahl&amp;)
</code></pre>
<p>als namespace funktion<br />
oder unter Umständen:</p>
<pre><code class="language-cpp">zahl operator+(zahl, const zahl&amp;)
</code></pre>
<p>wenn du die gängige implementation mittels += durchführen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944616</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2005 00:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 00:41:50 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>eine Referenz auf ein lokales Objekt</p>
</blockquote>
<p>na und? ist denn nicht gewährleistet, dass es bis zum ende der aufrufenden anweisung existiert? war da nicht sowas?</p>
<blockquote>
<p>zurückgeben und noch dazu ein konstantes was die Verkettung von +-Operatoren verbieten würde.</p>
</blockquote>
<p>(btw, wie ging das nochmal? :D)</p>
<p>na egal, dann ich nehm mal campers variante</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
ich hab den thread jetzt nur kurz überflogen, aber geht es da nicht um funktionsparameter? ich gebe ja keine referenz auf einen parameter, sondern eine auf ein lokales objekt zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944619</guid><dc:creator><![CDATA[m3dus4]]></dc:creator><pubDate>Sun, 18 Dec 2005 00:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 01:24:25 GMT]]></title><description><![CDATA[<p>m3dus4 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
ich hab den thread jetzt nur kurz überflogen, aber geht es da nicht um funktionsparameter? ich gebe ja keine referenz auf einen parameter, sondern eine auf ein lokales objekt zurück.</p>
</blockquote>
<p>ja, noch schlimmer!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944627</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2005 01:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 10:47:37 GMT]]></title><description><![CDATA[<p>ok, aber mein objekt kann jetzt ganz schön groß sein. wie verhindere ich die unnötige kopie <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/944705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944705</guid><dc:creator><![CDATA[m3dus4]]></dc:creator><pubDate>Sun, 18 Dec 2005 10:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:15:58 GMT]]></title><description><![CDATA[<p>Die Kopie ist nicht <strong>unnötig</strong>. Das Objekt, welches innerhalb der Funktion erstellt wird, ist auf dem Stack, d.h. es ist nach dem Funktionsaufruf <strong>weg</strong>.<br />
Wenn du Glück hast optimiert der Compiler diese Kopie des Objekts weg (-&gt; Return value optimization).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944720</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:17:19 GMT]]></title><description><![CDATA[<p>Was meinst du eigentlich mit &quot;nightly build&quot; in der Überschrift?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944722</guid><dc:creator><![CDATA[hä?]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:43:47 GMT]]></title><description><![CDATA[<p>m3dus4 schrieb:</p>
<blockquote>
<p>sollte ich eher</p>
<pre><code class="language-cpp">zahl operator+(const zahl&amp;)
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">const zahl&amp; operator+(const zahl&amp;)
</code></pre>
<p>nehmen?</p>
</blockquote>
<p>Weder noch, besser ist, du nimmst</p>
<pre><code class="language-cpp">const zahl operator +(const zahl&amp; lhs, const zahl&amp; rhs)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/944739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944739</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:49:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2813">@groovemaster</a>: Wieso const? Nene, wenn schon außerhalb der Klasse dann bitte campers Variante <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>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944745</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:49:51 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:51:56 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Weder noch, besser ist, du nimmst</p>
<pre><code class="language-cpp">const zahl operator +(const zahl&amp; lhs, const zahl&amp; rhs)
</code></pre>
</blockquote>
<p>wieso keine member-methode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944747</guid><dc:creator><![CDATA[m3dus4]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:55:14 GMT]]></title><description><![CDATA[<p>m3dus4 schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>Weder noch, besser ist, du nimmst</p>
<pre><code class="language-cpp">const zahl operator +(const zahl&amp; lhs, const zahl&amp; rhs)
</code></pre>
</blockquote>
<p>wieso keine member-methode?</p>
</blockquote>
<p>Weil eine solche keine Konvertierungen auf dem linken Operand zulässt. Eine solche ist aber im Sinne der Kommutativität der Addition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944750</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:57:48 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>[...]und noch dazu ein konstantes was die Verkettung von +-Operatoren verbieten würde.</p>
</blockquote>
<p>Das verstehe ich nicht. Die Verkettung hat hier doch nichts mit dem Return-Wert zu tun. D.h. auch wenn ich diesen als const deklariere, kann ich verschiedene Werte mit dem op+ verketten.<br />
Also sowas a la</p>
<pre><code class="language-cpp">meine_klasse_mit_dem_const_op obj = o1 + o2 + o3 + ...;
</code></pre>
<p>machen.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944751</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 11:59:38 GMT]]></title><description><![CDATA[<p>Hallo,<br />
für const spricht, dass ein Ausdruck wie (z1 + z2) = z3; zum Compile-Zeit-Fehler wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944753</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 12:00:43 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>m3dus4 schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>Weder noch, besser ist, du nimmst</p>
<pre><code class="language-cpp">const zahl operator +(const zahl&amp; lhs, const zahl&amp; rhs)
</code></pre>
</blockquote>
<p>wieso keine member-methode?</p>
</blockquote>
<p>Weil eine solche keine Konvertierungen auf dem linken Operand zulässt. Eine solche ist aber im Sinne der Kommutativität der Addition.</p>
</blockquote>
<p>häh? war das &quot;keine&quot; jetzt zuviel oder verstehe ich dich nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944754</guid><dc:creator><![CDATA[m3dus4]]></dc:creator><pubDate>Sun, 18 Dec 2005 12:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 12:08:10 GMT]]></title><description><![CDATA[<p>nein, dass stimmt schon wie er's gesagt hat. wenn du den operator als Member - Funktion implementierst, kann der linke Operand nicht in deine Klasse konvertiert werden. Implementierst du sie global, geht es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944758</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Sun, 18 Dec 2005 12:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 12:09:03 GMT]]></title><description><![CDATA[<p>m3dus4 schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>m3dus4 schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>Weder noch, besser ist, du nimmst</p>
<pre><code class="language-cpp">const zahl operator +(const zahl&amp; lhs, const zahl&amp; rhs)
</code></pre>
</blockquote>
<p>wieso keine member-methode?</p>
</blockquote>
<p>Weil eine solche keine Konvertierungen auf dem linken Operand zulässt. Eine solche ist aber im Sinne der Kommutativität der Addition.</p>
</blockquote>
<p>häh? war das &quot;keine&quot; jetzt zuviel oder verstehe ich dich nicht?</p>
</blockquote>
<p>Nein, aber der Satz ist trotzdem furchtbar mißverständlich.<br />
Also nochmal anders: angenommen Objekte deiner Klasse zahl lassen sich implizit aus ints erzeugen (zahl besitzt also einen Konvertierungs-Ctor). In diesem Fall kannst du dann sowas schreiben wie:</p>
<pre><code class="language-cpp">zahl z = ...;
zahl r = z + 42;
</code></pre>
<p>Da Addition kommutativ ist (also a + b &lt;-&gt; b + a), solltest du genausogut auch</p>
<pre><code class="language-cpp">zahl z = ...;
zahl r = 42 + z;
</code></pre>
<p>schreiben können.<br />
Dies setzt aber voraus, dass der linke Operand (42) zuvor in ein Objekt vom Typ zahl konvertiert wird. Konvertierungen auf dem linken Operand sind aber nur bei freien Funktionen möglich. Nicht aber bei Memberfunktionen. Aus diesem Grund solltest du den operator+ als freie Funktion implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944759</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 18 Dec 2005 12:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 13:07:57 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Hallo,<br />
für const spricht, dass ein Ausdruck wie (z1 + z2) = z3; zum Compile-Zeit-Fehler wird.</p>
</blockquote>
<p>und gegen const spricht, das auch die beste klase sich niemals gänzlich wie ein builtin typ verhalten wird (und im übrigen die meisten klassen ohnehin keine entsprechende vorlage in form von built-ins haben). ich habe noch niemanden gesehen, der mal soeben (z1+z2)=z3 schreibt - wer das tut, kriegt, was er verdient. und es hat ja bekanntlich keinen sinn, sich gegen machiaveli verteidigen zu wollen, der schreibt nähmlich noch ein const_cast dazu, un du hast nichts erreicht.<br />
ein non-const return kann zum beispiel dazu benutzt werden, move-konstruktoren zu implementieren, um so teure kopien, wie sie z.b. mit unbeschränkten zahlentypen auftreten können, zu vermeiden (RVO bzw. NRVO ist nunmal nicht in jeder situation möglich). es gibt ein menge legale und sinnvolle konstrukte, die ein non-const return voraussetzen, manche davon sind fast schon idiomatisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944797</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2005 13:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 16:15:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a><br />
ich habe ein const-return nicht empfohlen. Lediglich das gängige Pro-Argument aufgeführt.<br />
In meinen Augen gibt es vier potentielle Signaturen:</p>
<p>1. T operator @ (const T&amp;, const T&amp;);<br />
2. const T operator @ (const T&amp;, const T&amp;);</p>
<p>3. T operator @ (T, const T&amp;);<br />
4. const T operator @ (T, const T&amp;);</p>
<p>Keine davon ist der eindeutige Sieger, da alle ihre Vor- und Nachteile haben. Ich bevorzuge 1. kann aber auch mit 2-4 leben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944920</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 18 Dec 2005 16:15:35 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ (nightly build) on Sun, 18 Dec 2005 16:30:09 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>und gegen const spricht, das auch die beste klase sich niemals gänzlich wie ein builtin typ verhalten wird</p>
</blockquote>
<p>Wieso spricht das gegen const? Wenn überhaupt, dann spricht das nur nicht _für_ const.</p>
<p>camper schrieb:</p>
<blockquote>
<p>und im übrigen die meisten klassen ohnehin keine entsprechende vorlage in form von built-ins haben</p>
</blockquote>
<p>Die meisten Klassen sind ja auch nicht als builtin ausgelegt. Trotzdem gibt es welche, die sich genau so anfühlen.</p>
<p>camper schrieb:</p>
<blockquote>
<p>ich habe noch niemanden gesehen, der mal soeben (z1+z2)=z3 schreibt</p>
</blockquote>
<p>Da du ja schon einige Zeit hier im Forum aktiv bist, dürftest du mittlerweile mitbekommen haben, auf was für seltsame Ideen Leute so kommen. Deshalb zählt dieses Argument nicht.</p>
<p>camper schrieb:</p>
<blockquote>
<p>und es hat ja bekanntlich keinen sinn, sich gegen machiaveli verteidigen zu wollen, der schreibt nähmlich noch ein const_cast dazu, un du hast nichts erreicht.</p>
</blockquote>
<p>Ein Stückchen mehr Sicherheit, wenn auch keine vollständige, würde ich nicht als nichts bezeichnen.</p>
<p>camper schrieb:</p>
<blockquote>
<p>ein non-const return kann zum beispiel dazu benutzt werden, move-konstruktoren zu implementieren, um so teure kopien, wie sie z.b. mit unbeschränkten zahlentypen auftreten können, zu vermeiden (RVO bzw. NRVO ist nunmal nicht in jeder situation möglich).</p>
</blockquote>
<p>Mir ist zwar momentan nicht klar, was du mit &quot;move-konstruktoren&quot; meinst. Aber niemand sagt ja, dass du const Rückgaben verwenden _musst_. IdR verwende ich diese aber, da sie den aufgezeigten Nachteil nicht haben und gegenüber non-const Rückgaben auch keine anderen Nachteile aufweisen (afaik), sofern du nicht auf ein veränderbares Objekt angewiesen bist. Das ist ein bisschen so wie mit der Diskussion um <em>explicit</em>. Ist das momentan nun richtig spezifiziert? Oder sollte lieber jeder dtor explicit sein und dies nur bei Bedarf mit einem <em>implicit</em> Schlüsselwort ausgehebelt werden können?</p>
<p>camper schrieb:</p>
<blockquote>
<p>es gibt ein menge legale und sinnvolle konstrukte, die ein non-const return voraussetzen, manche davon sind fast schon idiomatisch.</p>
</blockquote>
<p>Ach ja? Dann nenn doch mal ein paar. 10 dürften wohl für den Anfang reichen. Ich bin schon gespannt darauf, was neues kennenzulernen. Ich darf dich nochmal daran erinnern, wir reden über binäre Operatoren und du sagtest &quot;legale&quot; und &quot;sinnvolle&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944932</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 18 Dec 2005 16:30:09 GMT</pubDate></item></channel></rss>