<?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[const_iterator]]></title><description><![CDATA[<p>Hallo,<br />
wenn ich eine eigene Klasse mit iterator und const_iterator dann brauche ich ja auch 2x die methoden begin und end. Aber wenn ich dann im Programm eingebe Klasse.begin(). Woher weiß der Complier dann, ob er das const begin oder das normale begin nehmen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263345/const_iterator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 20:34:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263345.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Mar 2010 11:48:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 11:48:41 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wenn ich eine eigene Klasse mit iterator und const_iterator dann brauche ich ja auch 2x die methoden begin und end. Aber wenn ich dann im Programm eingebe Klasse.begin(). Woher weiß der Complier dann, ob er das const begin oder das normale begin nehmen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871237</guid><dc:creator><![CDATA[Der Anfänger!]]></dc:creator><pubDate>Fri, 19 Mar 2010 11:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 11:54:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

class Foo
{
public:
  void hallo()       {std::cout &lt;&lt; &quot;non-const!\n&quot;;}
  void hallo() const {std::cout &lt;&lt; &quot;    CONST!\n&quot;;}
  //           ^^^^^
  //  für den this-Parameter
};

int main() {
  Foo f;
  Foo      * p1 = &amp;f;
  Foo const* p2 = &amp;f;
  p1-&gt;hallo();
  p2-&gt;hallo();
}
</code></pre>
<p>Ausprobieren: <a href="http://codepad.org/1QRb3CWV" rel="nofollow">HIER</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871238</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Mar 2010 11:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 12:00:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Foo const* p2 = &amp;f;
</code></pre>
<p>ist ein Zeiger auf ein konstantes Objekt oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871241</guid><dc:creator><![CDATA[Der Anfänger!]]></dc:creator><pubDate>Fri, 19 Mar 2010 12:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 12:10:18 GMT]]></title><description><![CDATA[<p>Der Anfänger! schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo const* p2 = &amp;f;
</code></pre>
<p>ist ein Zeiger auf ein konstantes Objekt oder?</p>
</blockquote>
<p>Viele würden das bejahen. Strenggenommen ist das Objekt, bezeichnet durch f, nicht &quot;konstant&quot;. Aber das Objekt hinter f lässt sich eben über p2 nicht verändern, weil nur const-Methoden über p2 aufgerufen werden können und jeder Elementzufriff über p2 auch automatisch const-qualifiziert ist. Man sagt trotzdem &quot;p2 ist ein Zeiger auf ein konstantes Foo&quot; wobei damit gemaint ist, dass Objekt nicht unbedingt konstant ist, nur über diesen Zeiger eben nicht verändert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871245</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Mar 2010 12:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 12:29:28 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>Du sagst der Pointer zeigt nicht auf ein konstantes Objekt, weil das Objekt, dessen Adresse genommen wurde nicht konstant war. Mit der Argumentation kann man dann aber auch weiter gehen und erklären, dass eigentlich so ziemlich alles nicht-konstant ist, denn man kann auf alles was auf dem Heap und Stack liegt ein const_cast bügeln um es zu verändern. Und dann geht man noch weiter und sagt dass ja eh eigentlich alles im Hauptspeicher ist und es höchstwahrscheinlich irgendwelche abstrusen Möglichkeiten geben wird, mit Betriebssystemmitteln alles was da rumliegt zu verändern. Nichts ist also const.<br />
Rein sprachlich ist ein Pointer to const ein Pointer auf ein Konstantes Objekt, Punkt. Man kann darüber das Obejekt nicht verändern, mutable member ausgenommen. Selbst ein const_cast ändert da nichts dran, der liefert nur einen weiteren Pointer (mit dem selben Wert), aber auf ein nichtkonstantes Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871252</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 19 Mar 2010 12:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 12:47:14 GMT]]></title><description><![CDATA[<p>Ich wollte mit meiner Erklärung eigentlich mögliche Missverständnisse vermeiden.</p>
<p>pumuckl&gt;&gt; denn man kann auf alles was auf dem Heap und Stack liegt ein const_cast bügeln um es zu verändern.</p>
<p>Nein, kann man <a href="http://codepad.org/6UUIR3uF" rel="nofollow">nicht</a>:</p>
<pre><code class="language-cpp">int main() {
  const int blupp = 1;
  const_cast&lt;int&amp;&gt;(blupp) = 0; // undefiniertes Verhalten
  return blupp;
}
</code></pre>
<p>pumuckl&gt;&gt; Rein sprachlich ist ein Pointer to const ein Pointer auf ein Konstantes Objekt</p>
<p>Dass das so sprachlich benutzt wird, bestreite ich nicht. Ich wollte nur erklären, dass es sich dabei nicht wirklich um ein &quot;konstantes Objekt&quot; handeln muss, sondern dass das <code>const</code> beim Zeiger eher so etwas wie eine Zugriffsbeschränkung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871264</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Mar 2010 12:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 13:28:07 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Nein, kann man <a href="http://codepad.org/6UUIR3uF" rel="nofollow">nicht</a>:</p>
<pre><code class="language-cpp">int main() {
  const int blupp = 1;
  const_cast&lt;int&amp;&gt;(blupp) = 0; // undefiniertes Verhalten
  return blupp;
}
</code></pre>
</blockquote>
<p>Das ist deswegen undefiniert weil der Compiler die Konstante wegoptimieren darf, so dass es dann nichts mehr gibt was auf dem stack liegen würde. Grundsätzlich kann man aber solang etwas tatsächlich auf dem Stack existiert, mit entsprechenden Hacks da lustig drauf rumschreiben, auch wenns an allen Regeln der Sprache und des guten Geschmacks vorbeigeht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871287</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 19 Mar 2010 13:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to const_iterator on Fri, 19 Mar 2010 13:47:58 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Das ist deswegen undefiniert weil [...]</p>
</blockquote>
<p>Es ist undefiniert. Das warum und wieso tut hier gar nichts zur Sache.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Nichts ist also const.</p>
</blockquote>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1871299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871299</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Mar 2010 13:47:58 GMT</pubDate></item></channel></rss>