<?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[operatoren]]></title><description><![CDATA[<p>hallo</p>
<p>gibt es einen grund wieso:<br />
-es kein logisches xor gibt?<br />
-es kein ||= gibt?<br />
-es kein &amp;&amp;= gibt?</p>
<p>und wenn ich gerade schon einen thread aufgemacht habe:<br />
wie lasst ihr euch !=, &lt;=, &gt;, &gt;= generieren wenn ihr == und &lt; selbst definiert habt? gibt es da irgendwelche tricks? (auf makros habe ich persönlich wenig lust)</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322061/operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 11:28:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322061.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Dec 2013 09:57:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 09:57:03 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>gibt es einen grund wieso:<br />
-es kein logisches xor gibt?<br />
-es kein ||= gibt?<br />
-es kein &amp;&amp;= gibt?</p>
<p>und wenn ich gerade schon einen thread aufgemacht habe:<br />
wie lasst ihr euch !=, &lt;=, &gt;, &gt;= generieren wenn ihr == und &lt; selbst definiert habt? gibt es da irgendwelche tricks? (auf makros habe ich persönlich wenig lust)</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369918</guid><dc:creator><![CDATA[asdfdasf]]></dc:creator><pubDate>Thu, 05 Dec 2013 09:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 10:22:24 GMT]]></title><description><![CDATA[<p>asdfdasf schrieb:</p>
<blockquote>
<p>hallo</p>
<p>gibt es einen grund wieso:<br />
-es kein logisches xor gibt?</p>
</blockquote>
<p>Ich weiß nicht, ob dies der Grund ist, aber im Fall von bools macht ein != genau das gleiche. Wenn du keine bools hast, kannst du durch ein ! einen Ausdruck zu bool machen:</p>
<pre><code>bool a,b;
if (a != b) //  a XOR B

int a,b;
if (!a != !b)  // a XOR B
</code></pre>
<blockquote>
<p>-es kein ||= gibt?<br />
-es kein &amp;&amp;= gibt?</p>
</blockquote>
<p>Für bool machen &amp;= und |= ohnehin schon das gleiche.</p>
<p>Allgemein: Wie soll denn da die Semantik sein?</p>
<pre><code>int a = 1;
a ||= foo();
</code></pre>
<p>Wird foo aufgerufen oder nicht? Beide Möglichkeiten wären wohl verwirrend. Aufruf in jedem Fall wäre inkonsistent zum normalen ||. Aufruf nur bei Bedarf wäre verwirrend, weil die Schreibweise ziemlich danach aussieht, als würde es in jedem Fall aufgerufen.</p>
<p>Wenn die Operanden keine bools sind? Das wird wohl wirklich zu exotisch, um die Sprache damit voll zu müllen.</p>
<blockquote>
<p>und wenn ich gerade schon einen thread aufgemacht habe:<br />
wie lasst ihr euch !=, &lt;=, &gt;, &gt;= generieren wenn ihr == und &lt; selbst definiert habt? gibt es da irgendwelche tricks? (auf makros habe ich persönlich wenig lust)</p>
</blockquote>
<p>Wenn man die paar Einzeiler nicht selber schreiben möchte, gibt es dafür was bei Boost (siehe Magazinartikel über Operatorüberladung). Da Boost auch nur mit Wasser kocht, kann man sich entsprechende Templates (keine Makros!) auch selber schreiben, wenn man unbedingt möchte.</p>
<p>P.S.:<br />
<a href="http://www.c-plusplus.net/forum/240706" rel="nofollow">http://www.c-plusplus.net/forum/240706</a><br />
<a href="http://www.c-plusplus.net/forum/242944" rel="nofollow">http://www.c-plusplus.net/forum/242944</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369923</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Dec 2013 10:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 10:53:37 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>asdfdasf schrieb:</p>
<blockquote>
<p>hallo</p>
<p>gibt es einen grund wieso:<br />
-es kein logisches xor gibt?</p>
</blockquote>
<p>Ich weiß nicht, ob dies der Grund ist, aber im Fall von bools macht ein != genau das gleiche. Wenn du keine bools hast, kannst du durch ein ! einen Ausdruck zu bool machen:</p>
<pre><code>bool a,b;
if (a != b) //  a XOR B

int a,b;
if (!a != !b)  // a XOR B
</code></pre>
</blockquote>
<p>ups ja stimmt, einfach die operanden in bools konvertieren und auf ungleichheit prüfen...</p>
<p>SeppJ schrieb:</p>
<blockquote>
<blockquote>
<p>-es kein ||= gibt?<br />
-es kein &amp;&amp;= gibt?</p>
</blockquote>
<p>Für bool machen &amp;= und |= ohnehin schon das gleiche.</p>
<p>Allgemein: Wie soll denn da die Semantik sein?</p>
<pre><code>int a = 1;
a ||= foo();
</code></pre>
<p>Wird foo aufgerufen oder nicht? Beide Möglichkeiten wären wohl verwirrend. Aufruf in jedem Fall wäre inkonsistent zum normalen ||. Aufruf nur bei Bedarf wäre verwirrend, weil die Schreibweise ziemlich danach aussieht, als würde es in jedem Fall aufgerufen.</p>
<p>Wenn die Operanden keine bools sind? Das wird wohl wirklich zu exotisch, um die Sprache damit voll zu müllen.</p>
</blockquote>
<p>man könnte einfach strikt sagen dass der ausdruck bei eingebauten typen zum ausdruck &quot; <code>lhs = lhs || rhs;</code> &quot; expandiert wird. soweit ich das sehe ist das dann auch für integrale typen und für bedingte aufrufe definiert (ich sage definiert, nicht intuitiv!). bei eigenen typen ist das überladen dieser operatoren (genau wie das überladen von &amp;&amp; oder ||) speziell und die regeln werden komisch.<br />
aber ja, ich weiss worauf du hinaus willst. <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 />
dann nehme ich die hand voll tastenanschläge eben einfach hin.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<blockquote>
<p>und wenn ich gerade schon einen thread aufgemacht habe:<br />
wie lasst ihr euch !=, &lt;=, &gt;, &gt;= generieren wenn ihr == und &lt; selbst definiert habt? gibt es da irgendwelche tricks? (auf makros habe ich persönlich wenig lust)</p>
</blockquote>
<p>Wenn man die paar Einzeiler nicht selber schreiben möchte, gibt es dafür was bei Boost (siehe Magazinartikel über Operatorüberladung). Da Boost auch nur mit Wasser kocht, kann man sich entsprechende Templates (keine Makros!) auch selber schreiben, wenn man unbedingt möchte.</p>
<p>P.S.:<br />
<a href="http://www.c-plusplus.net/forum/240706" rel="nofollow">http://www.c-plusplus.net/forum/240706</a><br />
<a href="http://www.c-plusplus.net/forum/242944" rel="nofollow">http://www.c-plusplus.net/forum/242944</a></p>
</blockquote>
<p>danke, so etwas habe ich gesucht.</p>
<p>gruss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369932</guid><dc:creator><![CDATA[asdfdasf]]></dc:creator><pubDate>Thu, 05 Dec 2013 10:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 13:34:19 GMT]]></title><description><![CDATA[<p>asdfdasf schrieb:</p>
<blockquote>
<p>wie lasst ihr euch !=, &lt;=, &gt;, &gt;= generieren wenn ihr == und &lt; selbst definiert habt? gibt es da irgendwelche tricks? (auf makros habe ich persönlich wenig lust)</p>
</blockquote>
<p>Manchmal reicht <a href="http://en.cppreference.com/w/cpp/utility/rel_ops/operator_cmp" rel="nofollow">rel_ops</a> aus dem Standard aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369965</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 05 Dec 2013 13:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 13:41:30 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Manchmal reicht <a href="http://en.cppreference.com/w/cpp/utility/rel_ops/operator_cmp" rel="nofollow">rel_ops</a> aus dem Standard aus.</p>
</blockquote>
<p>rel_ops ist so broken, dass man es unter keinen Umständen verwenden sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369967</guid><dc:creator><![CDATA[deprecated]]></dc:creator><pubDate>Thu, 05 Dec 2013 13:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Thu, 05 Dec 2013 21:23:59 GMT]]></title><description><![CDATA[<p>da der thread noch nicht alt ist benutze ich ihn nochmals:</p>
<p>ich implementiere gerade die paar wenigen operator-templates von boost nach die ich selbst brauche (so dass ich boost dafür nicht brauche da mein projekt selbst eine bibliothek werden soll). ich wollte nur kurz fragen, wie ich das hier machen soll:</p>
<pre><code>namespace mg
{
	namespace Operators
	{
		// Requires:
		//   (Derived + Derived)
		//   Derived = Derived
		template&lt;typename Derived, typename Chain = ::mg::EmptyBase&gt;
		class MakeAddAssignable : public Chain
		{
		protected:
			MakeAddAssignable()
			{
			}
		public:
			Derived&amp; operator+= (Derived const&amp; Rhs)
			{
				*this = *this + Rhs; // hier
				return *this; // und hier
			}
		};
</code></pre>
<p>wie löst man das problem geschickt und elegant? <code>this</code> einfach nach <code>Derived*</code> casten?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370073</guid><dc:creator><![CDATA[asdfdasf]]></dc:creator><pubDate>Thu, 05 Dec 2013 21:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Fri, 06 Dec 2013 06:41:52 GMT]]></title><description><![CDATA[<p>Implementier die Operatoren so:</p>
<pre><code>class ...
{
   ...
   friend Ret op(Derived a, Derived b)
   {
     ...
   }
};
</code></pre>
<p>Sie werden dann problemlos vom Compiler gefunden.<br />
Und normalerweise implementiert man operator$ mithilfe von operator$= und nicht umgekehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370118</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 06 Dec 2013 06:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren on Fri, 06 Dec 2013 06:48:35 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Implementier die Operatoren so:</p>
<pre><code>class ...
{
   ...
   friend Ret op(Derived a, Derived b)
   {
     ...
   }
};
</code></pre>
<p>Sie werden dann problemlos vom Compiler gefunden.<br />
Und normalerweise implementiert man operator$ mithilfe von operator$= und nicht umgekehrt.</p>
</blockquote>
<p>ja, das ist mir alles bewusst. es gibt aber ausnahmefälle wo es besser ist den operator<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mo>=</mo><mi>m</mi><mi>i</mi><mi>t</mi><mi>t</mi><mi>e</mi><mi>l</mi><mi>s</mi><mi>d</mi><mi>e</mi><mi>m</mi><mi>o</mi><mi>p</mi><mi>e</mi><mi>r</mi><mi>a</mi><mi>t</mi><mi>o</mi><mi>r</mi></mrow><annotation encoding="application/x-tex">= mittels dem operator</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mrel">=</span><span class="mord mathit">m</span><span class="mord mathit">i</span><span class="mord mathit">t</span><span class="mord mathit">t</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">s</span><span class="mord mathit">d</span><span class="mord mathit">e</span><span class="mord mathit">m</span><span class="mord mathit">o</span><span class="mord mathit">p</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.02778em;">r</span></span></span></span> zu implementieren (auch in meiner lib gibt es solche). manuell sind diese zugehörigen $=-operatoren trivial zu implementieren, ich frage mich aber wie man das als operator-base lösen kann (siehe post oben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370119</guid><dc:creator><![CDATA[asdfdasf]]></dc:creator><pubDate>Fri, 06 Dec 2013 06:48:35 GMT</pubDate></item></channel></rss>