<?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[Unverständlichkeiten in der Implementierung von CheckedIter in Stroustrups Buch]]></title><description><![CDATA[<p>Hi Community, <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>ich bin neu hier und freue mich sehr meine Fragen an Euch stellen (und vielleicht auch gelegentlich ein Paar Fragen anderer beantworten) zu<br />
dürfen. So dann gehts auch schon unverzüglich an meine zwei Fragen:</p>
<p>Es geht um die Implementierung von CheckedIter in Stroustrups Buch, die ich an zwei Stellen nicht ganz verstanden habe, erst die unwichtigere Frage:</p>
<p><strong>akt</strong> ist der ungeprüfte Iterator für die aktuelle Position<br />
<strong>c</strong> ist der Zeiger zum Container von <strong>akt</strong></p>
<p>*<em>reference operator</em>() const<br />
{<br />
if (akt==c-&gt;end()) throw out_of_bounds();<br />
return *akt;<br />
}</p>
<p>pointer operator-&gt;() const<br />
{<br />
if(akt==c-&gt;end()) throw out_of_bounds();<br />
return &amp;*akt; //durch * schon geprüft<br />
}**</p>
<p>Die Frage ist, warum im Kommentar &quot;<strong>durch * schon geprüft</strong>&quot; steht. Welches ***** ist damit gemeint (vielleicht hat man am besten den ganzen Code selber zur Überprüfung bereit <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="🙂"
    /> ). Hier wird wohl kaum der eigene <em><em>operator</em>()</em>* von CheckedIter gemeint sein, da bei der return-Anweisung von <strong>operator-&gt;()</strong> der eigene <em><em>operator</em>()</em>* des ungeprüften Iterators <strong>akt</strong> benutzt wird. Und wenn es durch ***** schon geprüft wäre wird doch, wie in der Implementierung des <strong>operator-&gt;()</strong> von CheckedIter zu sehen ist, dennoch durch die if-Anweisung geprüft, also dann doppelt geprüft. Sehe ich da was falsch??</p>
<p>Zur zweiten Frage:</p>
<p><strong>CheckedIter operator+(difference_type d) const<br />
{<br />
if (c-&gt;end()-akt &lt; d || d &lt; akt-c-&gt;begin()) throw out_of_bounds();<br />
return CheckedIter(c,akt+d);<br />
}</strong></p>
<p>Okay, meinen Einwand gegen diesen Code illustriere ich am besten mit einem Beispiel:</p>
<p>c-&gt;end sei c[10]<br />
akt stehe bei c[4]<br />
ich will, dass akt zu c[6] weiterwandert, also gebe ich für d = 2 ein</p>
<p>somit wäre die erste Teilbedingung der if-Abfrage nicht erfüllt:<br />
c-&gt;end()-akt &lt; d =&gt; 6 &lt; 2 FALSCH, also würde kein out_of_bouds() geworfen werden</p>
<p>aber nach der zweiten Teilbedingung würde gelten<br />
d &lt; akt-c-&gt;begin() =&gt; 2 &lt; 4 RICHTIG, da die Teilbedingungen miteinander verodert wurden wäre die Gesamtbedingung somit richtig und es würde ein out_of_bounds() geworfen, obwohl d = 2 unter den gegebenen Bedingungen kein out_of_bounds() erzeugen dürfte. Die beinahe identische if-Bedingung ist auch bei der Implementierung von <strong>operator[]()</strong> vorhanden. Sehe ich da was falsch?</p>
<p>Vielen dank im voraus <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/210957/unverständlichkeiten-in-der-implementierung-von-checkediter-in-stroustrups-buch</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:52:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210957.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Apr 2008 09:20:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unverständlichkeiten in der Implementierung von CheckedIter in Stroustrups Buch on Thu, 17 Apr 2008 09:20:53 GMT]]></title><description><![CDATA[<p>Hi Community, <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>ich bin neu hier und freue mich sehr meine Fragen an Euch stellen (und vielleicht auch gelegentlich ein Paar Fragen anderer beantworten) zu<br />
dürfen. So dann gehts auch schon unverzüglich an meine zwei Fragen:</p>
<p>Es geht um die Implementierung von CheckedIter in Stroustrups Buch, die ich an zwei Stellen nicht ganz verstanden habe, erst die unwichtigere Frage:</p>
<p><strong>akt</strong> ist der ungeprüfte Iterator für die aktuelle Position<br />
<strong>c</strong> ist der Zeiger zum Container von <strong>akt</strong></p>
<p>*<em>reference operator</em>() const<br />
{<br />
if (akt==c-&gt;end()) throw out_of_bounds();<br />
return *akt;<br />
}</p>
<p>pointer operator-&gt;() const<br />
{<br />
if(akt==c-&gt;end()) throw out_of_bounds();<br />
return &amp;*akt; //durch * schon geprüft<br />
}**</p>
<p>Die Frage ist, warum im Kommentar &quot;<strong>durch * schon geprüft</strong>&quot; steht. Welches ***** ist damit gemeint (vielleicht hat man am besten den ganzen Code selber zur Überprüfung bereit <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="🙂"
    /> ). Hier wird wohl kaum der eigene <em><em>operator</em>()</em>* von CheckedIter gemeint sein, da bei der return-Anweisung von <strong>operator-&gt;()</strong> der eigene <em><em>operator</em>()</em>* des ungeprüften Iterators <strong>akt</strong> benutzt wird. Und wenn es durch ***** schon geprüft wäre wird doch, wie in der Implementierung des <strong>operator-&gt;()</strong> von CheckedIter zu sehen ist, dennoch durch die if-Anweisung geprüft, also dann doppelt geprüft. Sehe ich da was falsch??</p>
<p>Zur zweiten Frage:</p>
<p><strong>CheckedIter operator+(difference_type d) const<br />
{<br />
if (c-&gt;end()-akt &lt; d || d &lt; akt-c-&gt;begin()) throw out_of_bounds();<br />
return CheckedIter(c,akt+d);<br />
}</strong></p>
<p>Okay, meinen Einwand gegen diesen Code illustriere ich am besten mit einem Beispiel:</p>
<p>c-&gt;end sei c[10]<br />
akt stehe bei c[4]<br />
ich will, dass akt zu c[6] weiterwandert, also gebe ich für d = 2 ein</p>
<p>somit wäre die erste Teilbedingung der if-Abfrage nicht erfüllt:<br />
c-&gt;end()-akt &lt; d =&gt; 6 &lt; 2 FALSCH, also würde kein out_of_bouds() geworfen werden</p>
<p>aber nach der zweiten Teilbedingung würde gelten<br />
d &lt; akt-c-&gt;begin() =&gt; 2 &lt; 4 RICHTIG, da die Teilbedingungen miteinander verodert wurden wäre die Gesamtbedingung somit richtig und es würde ein out_of_bounds() geworfen, obwohl d = 2 unter den gegebenen Bedingungen kein out_of_bounds() erzeugen dürfte. Die beinahe identische if-Bedingung ist auch bei der Implementierung von <strong>operator[]()</strong> vorhanden. Sehe ich da was falsch?</p>
<p>Vielen dank im voraus <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1493382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493382</guid><dc:creator><![CDATA[cilker]]></dc:creator><pubDate>Thu, 17 Apr 2008 09:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Unverständlichkeiten in der Implementierung von CheckedIter in Stroustrups Buch on Thu, 17 Apr 2008 10:39:00 GMT]]></title><description><![CDATA[<p>cilker schrieb:</p>
<blockquote>
<pre><code class="language-cpp">pointer operator-&gt;() const
{
   if(akt==c-&gt;end()) throw out_of_bounds();
   return &amp;*akt;                           //durch * schon geprüft
}
</code></pre>
</blockquote>
<p>Das sollte besser</p>
<pre><code class="language-cpp">pointer operator-&gt;() const
{
   return &amp;**this;
}
</code></pre>
<p>heißen. Es kann aber sein, dass es bereits ein entsprechendes Errata gibt, da müsstest du einfach mal auf <a href="http://www.research.att.com/~bs/3rd_errata.html" rel="nofollow">Stroustrups Seite</a> nachscheuen.</p>
<blockquote>
<p>Zur zweiten Frage:</p>
<pre><code class="language-cpp">CheckedIter operator+(difference_type d) const
{
   if (c-&gt;end()-akt &lt; d || d &lt; akt-c-&gt;begin()) throw out_of_bounds();
   return CheckedIter(c,akt+d);
}
</code></pre>
</blockquote>
<p>Das muss nat.</p>
<pre><code class="language-cpp">d &lt; c-&gt;begin()-akt
</code></pre>
<p>heißen. Wie geesagt, möglicherweise gibt es dazu bereits eine Korrektur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493446</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Apr 2008 10:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unverständlichkeiten in der Implementierung von CheckedIter in Stroustrups Buch on Thu, 17 Apr 2008 18:29:19 GMT]]></title><description><![CDATA[<p>Ja danke camper, bei deinen Versionen habe ich absolut nix mehr zu beanstanden thx <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1493808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493808</guid><dc:creator><![CDATA[cilker]]></dc:creator><pubDate>Thu, 17 Apr 2008 18:29:19 GMT</pubDate></item></channel></rss>