<?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[Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Kann mir einer erklären, wieso das geht? Oder liegt das an meinem Compiler, dass er nicht Standardkonform ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Outer
{
private:
  class Inner
  {
  public:
    Inner* operator -&gt;() { return this; };

    void test() { std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl; };
  };

public:
  Inner operator -&gt;()
  {
    return Inner();
  }
};

int main()
{
  Outer outer;
  outer-&gt;test();
  // Wieso muss ich hier nur einmal den operator -&gt;() hinschreiben?

  return 0;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227126/doppelter-operator-gt-aber-nur-einmal-hingeschrieben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 06:22:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227126.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Nov 2008 11:15:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 11:15:09 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Kann mir einer erklären, wieso das geht? Oder liegt das an meinem Compiler, dass er nicht Standardkonform ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Outer
{
private:
  class Inner
  {
  public:
    Inner* operator -&gt;() { return this; };

    void test() { std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl; };
  };

public:
  Inner operator -&gt;()
  {
    return Inner();
  }
};

int main()
{
  Outer outer;
  outer-&gt;test();
  // Wieso muss ich hier nur einmal den operator -&gt;() hinschreiben?

  return 0;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613110</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 11 Nov 2008 11:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 12:14:59 GMT]]></title><description><![CDATA[<p>Der Compiler übernimmt das für dich. Durch das Hinschreiben des einen Operators ist bereits gesichert, dass solange ein Objekt bzw. eine Referenz zurückgegeben wird der -&gt; Operator dieses Objekts aufgerufen wird, bis ein Zeigertyp zurückkommt auf den dann der vordefinierte -&gt;Operator angewendet werden kann.</p>
<p>P.S.: Hat noch jemand Probleme mit dem Forum? Die Seite kann bei mir häufig nicht geladen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613121</guid><dc:creator><![CDATA[Kritiker]]></dc:creator><pubDate>Tue, 11 Nov 2008 12:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 13:53:08 GMT]]></title><description><![CDATA[<p>Kritiker schrieb:</p>
<blockquote>
<p>P.S.: Hat noch jemand Probleme mit dem Forum? Die Seite kann bei mir häufig nicht geladen werden.</p>
</blockquote>
<p>Yep, bei mir genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613133</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Tue, 11 Nov 2008 13:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 14:02:26 GMT]]></title><description><![CDATA[<p>Ich werfe einfach noch mal eine Frage dazu (ich wollte auch mal einen Thread dazu aufmachen): Wieso funktioniert das eigentlich bei Iteratoren nicht?:</p>
<pre><code class="language-cpp">std::vector&lt;Foo*&gt;::iterator v;
v-&gt;foo();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1613144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613144</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 11 Nov 2008 14:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 14:11:57 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ich werfe einfach noch mal eine Frage dazu (ich wollte auch mal einen Thread dazu aufmachen): Wieso funktioniert das eigentlich bei Iteratoren nicht?:</p>
<pre><code class="language-cpp">std::vector&lt;Foo*&gt;::iterator v;
v-&gt;foo();
</code></pre>
</blockquote>
<p>Weil bereits ein Zeiger zurückkommt, nehme ich an. Der opterator -&gt;() vom Iterator in diesem Fall, liefert wohl ein Foo**.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21424">@Kritiker</a>,<br />
Danke für die Antwort. Das ist mal wieder ein geile Feature von C++ zum Ausnutzen <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613153</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 11 Nov 2008 14:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelter operator -&amp;gt;(), aber nur einmal hingeschrieben on Tue, 11 Nov 2008 14:12:53 GMT]]></title><description><![CDATA[<p>Nehmen wir an, a sei vom Typ A, und foo ein Element des Typs A. Weiterhin habe A einen überladenen operator-&gt;. Dann passiert bei der Dereferenzierung über -&gt; folgendes:</p>
<pre><code class="language-cpp">a-&gt;foo /* (1) entspricht */

decltype( A::operator-&gt; ) tmp = a::operator-&gt;(); 
tmp-&gt;foo /* (2a) wenn decltype( A::operator-&gt; ) ein Zeigertyp ist, wissen wir was passiert: (*tmp).foo */
         /* (2b) wenn decltype( A::operator-&gt; ) ein Objekttyp ist: GOTO (1) */
</code></pre>
<p>Sprich, wenn das Ergebnis eines operator-&gt; ein Typ ist, der selbst einen überladenen operator-&gt; hat, wird dieser aufgerufen. Erst wenn das Ergebnis eines operator-&gt; ein Zeigertyp ist, wird dereferenziert.</p>
<p>Bei Iteratoren klappt das nicht, weil das Ergebnis eines vector&lt;int*&gt;::operator-&gt; vom Typ int** ist. Und ein int** ist, einmal dereferenziert, ein int*. Da ein int* kein Objekttyp mit überladenem operator-&gt; ist, greift die o.a. Regel nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613154</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 11 Nov 2008 14:12:53 GMT</pubDate></item></channel></rss>