<?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[std::iterator::operator+ mit unsigned integral datatype]]></title><description><![CDATA[<p>TL;DR:</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>ist nicht gültig für alle Werte die x.size( ) annehmen kann.<br />
Frage: Fehlt dem c++ standard einfach nur die definition für den std::iteartor::operator+ für unsigned integrale oder ist dieses fehlen beabsichtigt, damit der operator nur für die ptrdiff_t definiert ist?<br />
Bitte keine Antworten der art: dieses Problem tritt in der Praxis nicht auf.</p>
<p>Hallo,<br />
ich bin gerade auf ein grundlegendes problem gestoßen:</p>
<pre><code>1&gt;...\websocket.cpp(116): warning C4244: 'argument' : conversion from 'uint64_t' to '__w64 int', possible loss of data
</code></pre>
<p>abstrahiert steht hier folgendes:</p>
<pre><code>x.begin( ) + x.size( )
</code></pre>
<p>man könnte annehmen das würde immer zum gewünschten ergebnis führen, allerdings tut es das nicht, also</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>ist NICHT in allen situationen der fall.<br />
Dieses Situationen mögen rein theoretischer Natur sein, aber es geht mir hier nicht um praktische Anwendung, sondern um die theoretische Überlegung:</p>
<p>Fehlt dem C++ Standard einfach nur die operator+ überladung für die iteratoren die auch für vorzeichenlose Integrale definiert ist?<br />
Denn man könnte die &quot;Richtigkeit&quot; von</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>eigentlich erwarten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321693/std-iterator-operator-mit-unsigned-integral-datatype</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 06:04:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321693.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Nov 2013 13:04:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::iterator::operator+ mit unsigned integral datatype on Thu, 21 Nov 2013 13:04:23 GMT]]></title><description><![CDATA[<p>TL;DR:</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>ist nicht gültig für alle Werte die x.size( ) annehmen kann.<br />
Frage: Fehlt dem c++ standard einfach nur die definition für den std::iteartor::operator+ für unsigned integrale oder ist dieses fehlen beabsichtigt, damit der operator nur für die ptrdiff_t definiert ist?<br />
Bitte keine Antworten der art: dieses Problem tritt in der Praxis nicht auf.</p>
<p>Hallo,<br />
ich bin gerade auf ein grundlegendes problem gestoßen:</p>
<pre><code>1&gt;...\websocket.cpp(116): warning C4244: 'argument' : conversion from 'uint64_t' to '__w64 int', possible loss of data
</code></pre>
<p>abstrahiert steht hier folgendes:</p>
<pre><code>x.begin( ) + x.size( )
</code></pre>
<p>man könnte annehmen das würde immer zum gewünschten ergebnis führen, allerdings tut es das nicht, also</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>ist NICHT in allen situationen der fall.<br />
Dieses Situationen mögen rein theoretischer Natur sein, aber es geht mir hier nicht um praktische Anwendung, sondern um die theoretische Überlegung:</p>
<p>Fehlt dem C++ Standard einfach nur die operator+ überladung für die iteratoren die auch für vorzeichenlose Integrale definiert ist?<br />
Denn man könnte die &quot;Richtigkeit&quot; von</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>eigentlich erwarten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366791</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 21 Nov 2013 13:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::iterator::operator+ mit unsigned integral datatype on Thu, 21 Nov 2013 13:21:27 GMT]]></title><description><![CDATA[<p>Krauzi schrieb:</p>
<blockquote>
<p>TL;DR:</p>
<pre><code>x.begin( ) + x.size( ) == x.end( )
</code></pre>
<p>ist nicht gültig für alle Werte die x.size( ) annehmen kann.</p>
</blockquote>
<p>genauer: die Gleichheit ist garantiert, sofern der Ausdruck überhaupt ein definitiertes Ergebnis hat.<br />
Die Problematik mit dem Vorzeichen bei size_type und difference_type betrifft nicht nur Iteratoren, afaik nimmt man das aber hin: die Implementation beschränkt die tatsächlich möglichen Werte auf einen Bereich, der auch in difference_type hereinpasst (i.d.R. ist das schon durch die hardware-/OS-seitige Speicherverteilung bedingt). Ausnahmen könnten bei Pseudocontainern (z.B. vector&lt;bool&gt; oder file-basiert) existieren; auch dort wird man im Zweifel aber eher auf einen größeren Datentyp ausweichen.</p>
<p>TL;DR: ist ein theoretisches, aber kein praktisches Problem (abgesehen von ggf. unnötigen Warnungen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366802</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 21 Nov 2013 13:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::iterator::operator+ mit unsigned integral datatype on Thu, 21 Nov 2013 13:57:08 GMT]]></title><description><![CDATA[<p>Krauzi schrieb:</p>
<blockquote>
<p>Bitte keine Antworten der art: dieses Problem tritt in der Praxis nicht auf.</p>
</blockquote>
<p>edit: ich wiederhole meine frage:<br />
Ist dies Beabsichtigt oder einfach nur vergessen worden im standard zu definieren?<br />
Falls Beabsichtigt? Aus gründen der konsitenz wegen differen_type == ptrdiff_t oder hat es andere gründe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366811</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 21 Nov 2013 13:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::iterator::operator+ mit unsigned integral datatype on Thu, 21 Nov 2013 14:14:23 GMT]]></title><description><![CDATA[<p>Krauzi schrieb:</p>
<blockquote>
<p>Krauzi schrieb:</p>
<blockquote>
<p><strong>Bitte keine Antworten der art: dieses Problem tritt in der Praxis nicht auf.</strong></p>
</blockquote>
<p>edit: ich wiederhole meine frage:<br />
Ist dies Beabsichtigt oder <strong>einfach nur vergessen worden im standard zu definieren?</strong><br />
Falls Beabsichtigt? Aus gründen der konsitenz wegen differen_type == ptrdiff_t oder hat es andere gründe?</p>
</blockquote>
<p>Das ist aber wahrscheinlich die korrekte Antwort... C++ ist eine Sprache für die Praxis, ein Problem, das nicht auftreten kann, bedarf auch keiner Lösung.</p>
<p>difference_type muss ein Vorzeichen haben (wegen a+n == a-(-n) ) - es sei denn man macht sich die Mühe, auch noch den Überlauf zu definieren, was ungleich schwieriger ist.</p>
<p>Ganz nebenbei: wenn es eine Überladung für size_type gäbe, müsste man auch noch Überladungen für alle anderen integralen Typen bereitstellen (sonst gibt es schon bei it+1 Mehrdeutigkeitigen). Aufwand für ein nicht existentes Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366815</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 21 Nov 2013 14:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::iterator::operator+ mit unsigned integral datatype on Thu, 21 Nov 2013 15:24:55 GMT]]></title><description><![CDATA[<p>Nur eine Folge davon, dass die Standardbibliothek Typen nicht konsistent verwendet. Siehe <a href="http://www.c-plusplus.net/forum/p2285014#2285014" rel="nofollow">hier</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366834</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 21 Nov 2013 15:24:55 GMT</pubDate></item></channel></rss>