<?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[Importer:Error:WasEmpty]]></title><description><![CDATA[<p>Ich hab in den quellcode der STL von Visual Studio 2013 geguckt und da ist mir eine sache aufgefallen:<br />
Nahezu alle operatoren werden außerhalb der klasse definiert,<br />
es wird also statt</p>
<pre><code>bool operator &gt; (const vector&lt;T,Alloc&gt;&amp; o)
{ /*....*/ }
</code></pre>
<p>innhalb der klasse</p>
<pre><code>template&lt;class T, class Alloc&gt;
bool operator &gt; (const vector&lt;T,Alloc&gt;&amp; l, const vector&lt;T,Alloc&gt;&amp; r)
{ /*....*/ }
</code></pre>
<p>außerhalb der klasse geschrieben.<br />
Ich frage mich nun ob da irgendein struktureller vorteil oder so entsteht. Für mich sieht es einfach nur nach unnötiger schreibarbeit und sucherei aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321579/importer-error-wasempty</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 13:48:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321579.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Nov 2013 11:37:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 11:37:35 GMT]]></title><description><![CDATA[<p>Ich hab in den quellcode der STL von Visual Studio 2013 geguckt und da ist mir eine sache aufgefallen:<br />
Nahezu alle operatoren werden außerhalb der klasse definiert,<br />
es wird also statt</p>
<pre><code>bool operator &gt; (const vector&lt;T,Alloc&gt;&amp; o)
{ /*....*/ }
</code></pre>
<p>innhalb der klasse</p>
<pre><code>template&lt;class T, class Alloc&gt;
bool operator &gt; (const vector&lt;T,Alloc&gt;&amp; l, const vector&lt;T,Alloc&gt;&amp; r)
{ /*....*/ }
</code></pre>
<p>außerhalb der klasse geschrieben.<br />
Ich frage mich nun ob da irgendein struktureller vorteil oder so entsteht. Für mich sieht es einfach nur nach unnötiger schreibarbeit und sucherei aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365961</guid><dc:creator><![CDATA[g213424]]></dc:creator><pubDate>Sun, 17 Nov 2013 11:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 11:47:52 GMT]]></title><description><![CDATA[<p>Generell weiß ich den Grund auch nicht.<br />
Allerdings kann man mit den globalen Operatoren teilweise wesentlich mehr machen, z.B. statt <em>Klasse * int</em> kann man auch <em>int * Klasse</em> überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365963</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Sun, 17 Nov 2013 11:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 12:06:28 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>Generell weiß ich den Grund auch nicht.<br />
Allerdings kann man mit den globalen Operatoren teilweise wesentlich mehr machen, z.B. statt <em>Klasse * int</em> kann man auch <em>int * Klasse</em> überladen.</p>
</blockquote>
<p>Das wird der Grund sein.<br />
Überlädt man operator # einer Klasse C innerhalb der Klasse C, die man anhand eines Objekten vom Typ T erzeugen kann, ist folgendes legal:<br />
some_c # some_t aber nicht some_t # some_c, weil das ausgeschrieben some_t.operator#(some_c) wäre, was illegal ist, wenn T bspw. 5 ist; 5.operator+(sth) ist illegal.<br />
Als freie Funktion ist das aber erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365970</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 17 Nov 2013 12:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 12:24:55 GMT]]></title><description><![CDATA[<blockquote>
<p>z.B. statt Klasse * int kann man auch int * Klasse überladen.</p>
</blockquote>
<p>Das ist für vector kein Argument.</p>
<blockquote>
<p>Für mich sieht es einfach nur nach unnötiger schreibarbeit und sucherei aus...</p>
</blockquote>
<p>Vielleicht ist es bei denen einfach eine ganz pauschale Regel. Ist aber trotzdem bescheuert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365973</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 17 Nov 2013 12:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 12:48:21 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Ist aber trotzdem bescheuert.</p>
</blockquote>
<p>Ähm, nein. Binäre Operatoren macht man in der Regel aus Symmetriegründen global. Bescheuert wäre, es nur wegen Schreibarbeit nicht zu tun.</p>
<p>Globale Operatoren erlauben es, beide Argumente implizit zu konvertieren. Bei Member-Operatoren gilt das nur für das rechte Argument, was eine nicht-intuitive Asymmetrie mit sich bringt. Kommt zwar bei STL-Containern selten vor, ist aber nicht ausgeschlossen, denkt man an Boost.Assign.</p>
<p>Lest vielleicht mal den <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">Artikel</a> über Operatorüberladung in C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365982</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 17 Nov 2013 12:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 13:24:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Globale Operatoren erlauben es, beide Argumente implizit zu konvertieren.</p>
</blockquote>
<p>Das ist doch klar. (Edit²: Es hat sich so angehört, als ob ich es nicht wüsste <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>Der Standard selbst schreibt vor, dass die Operatoren von Containern global überladen werden sollen (siehe Header Synopsis für &lt;vector&gt;, usw.). Das wird wohl der Grund sein. Boost.Assign kenne ich nicht, kannst du mal erklären inwiefern das für die Lib einen Unterschied macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365985</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 17 Nov 2013 13:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 14:45:23 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Das ist doch klar. (Edit²: Es hat sich so angehört, als ob ich es nicht wüsste <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>
</blockquote>
<p>Wenn es so klar ist, warum bezeichnest du das Ganze als bescheuert? <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="🙄"
    /></p>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Boost.Assign kenne ich nicht, kannst du mal erklären inwiefern das für die Lib einen Unterschied macht?</p>
</blockquote>
<p>In der Bibliothek gibts Funktionen, die Objekte zurückgeben, welche implizit zu STL-Containern konvertierbar sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366014</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Sun, 17 Nov 2013 15:10:01 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn es so klar ist, warum bezeichnest du das Ganze als bescheuert? <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="🙄"
    /></p>
</blockquote>
<p>Ich habe mich auf den speziellen Fall von <code>vector</code> bezogen, nicht allgemein. Dass das globale Überladen von Operatoren diesen Vorteil hat, dürfte jedem Leser dieses Threads klar sein.</p>
<p>Trotzdem ist das Symmtrie-Argument bei Containern sehr schwach. Wer hat schon jemals diesen Fall mit Boost.Assign tatsächlich benötigt?</p>
<p>Aber prinzipiell stimmt das völlig, man sollte Operatoren allgemein immer global überladen. Ich nehme das 'bescheuert' natürlich zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366017</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 17 Nov 2013 15:10:01 GMT</pubDate></item></channel></rss>