<?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[dekrementieren]]></title><description><![CDATA[<p>ich hänge jetzt seit geraumer Zeit über den zwei Zeilen</p>
<p>wert=3;<br />
cout &lt;&lt; &quot;Der Wert ist: &quot; &lt;&lt; ++wert + ++wert + ++wert + ++wert + ++wert &lt;&lt; endl; //31</p>
<p>und komme nie auf 31 als Ergebnis <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Bitte um einen Tip</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242967/dekrementieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 15:50:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242967.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Jun 2009 13:41:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:41:51 GMT]]></title><description><![CDATA[<p>ich hänge jetzt seit geraumer Zeit über den zwei Zeilen</p>
<p>wert=3;<br />
cout &lt;&lt; &quot;Der Wert ist: &quot; &lt;&lt; ++wert + ++wert + ++wert + ++wert + ++wert &lt;&lt; endl; //31</p>
<p>und komme nie auf 31 als Ergebnis <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Bitte um einen Tip</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724512</guid><dc:creator><![CDATA[NEWc++MAN]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:45:57 GMT]]></title><description><![CDATA[<p>Warum schreibst Du im Title &quot;dekrementieren&quot;, wenns doch ums inkrementieren geht?</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724515</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:48:03 GMT]]></title><description><![CDATA[<p>It is called: undefined behaviour.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724518</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:50:01 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>It is called: undefined behaviour.</p>
</blockquote>
<p>Sicher?<br />
Eigtl ist doch nur die Auswertungsreihenfolge undefiniert - die sollte aber hier relativ egal sein...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724520</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:51:11 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>die sollte aber hier relativ egal sein...</p>
</blockquote>
<p>Sollte sie? Was, wenn der Compiler zuerst alle <code>++</code> auswertet und dann addiert? Das ist nicht verboten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724522</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:51:15 GMT]]></title><description><![CDATA[<p>Ich komme auf 30.</p>
<p>VC++ 6 liefert aber auch 31.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724524</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:52:14 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>die sollte aber hier relativ egal sein...</p>
</blockquote>
<p>Sollte sie? Was, wenn der Compiler zuerst alle <code>++</code> auswertet und dann addiert? Das ist nicht verboten.</p>
</blockquote>
<p>Und wäre das nicht auch egal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724526</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:59:00 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Und wäre das nicht auch egal?</p>
</blockquote>
<p>Natürlich nicht. Wenn er zuerst alle Teilausdrücke inkrementiert, kommt wohl eine andere Summe zustande, als wenn er sie zum Beispiel nach jeder einzelnen Addition wieder inkrementiert.</p>
<p>Tatsache ist, auf eine Variable darf zwischen zwei Sequenzpunkten (dazu gehören zum Beispiel die Operatoren &amp;&amp;, || und ,) nicht mehrfach zugegriffen werden, wenn sie in dieser Zeit verändert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724527</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 13:58:55 GMT]]></title><description><![CDATA[<p>Ach so, du meinst:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; 4 + 4 + 4 + 4 + 4 &lt;&lt; std::endl;
</code></pre>
<p>Edit: Nee, meinst Du nicht^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724532</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:01:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>die sollte aber hier relativ egal sein...</p>
</blockquote>
<p>Sollte sie? Was, wenn der Compiler zuerst alle <code>++</code> auswertet und dann addiert? Das ist nicht verboten.</p>
</blockquote>
<p>Oo Hab ich noch nicht gewusst... Dachte bisher immer - da der Preinc-op das Rückgeben impliziert, dass das auch (direkt) nacheinander ausgeführt wird...<br />
aber ok - mein fehler ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724537</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:04:56 GMT]]></title><description><![CDATA[<p>Bei mir kommt bei</p>
<pre><code class="language-cpp">int i = 3;
std::cout &lt;&lt; (++i) + (++i) &lt;&lt; std::endl;
</code></pre>
<p>zum Beispiel 10 raus, was mich darauf schliessen lässt, dass er zuerst alle Inkremente durchführt und dann addiert. Genauso erlaubt wäre es, zuerst einen Summanden zu inkrementieren (-&gt; 4) und dann diesen zu dem zweiten inkrementierten (-&gt; 5) zu addieren, was folglich zu einem anderen Resultat führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724542</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:07:34 GMT]]></title><description><![CDATA[<pre><code>int wert=3;
int res =  ++wert + ++wert + ++wert + ++wert + ++wert ; //31
</code></pre>
<p>VS 2008 sagt 40.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724545</guid><dc:creator><![CDATA[MiP]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:08:34 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Bei mir kommt bei</p>
<pre><code class="language-cpp">int i = 3;
std::cout &lt;&lt; (++i) + (++i) &lt;&lt; std::endl;
</code></pre>
<p>zum Beispiel 10 raus, was mich darauf schliessen lässt, dass er zuerst alle Inkremente durchführt und dann addiert. Genauso erlaubt wäre es, zuerst einen Summanden zu inkrementieren (-&gt; 4) und dann diesen zu dem zweiten inkrementierten (-&gt; 5) zu addieren, was folglich zu einem anderen Resultat führt.</p>
</blockquote>
<p>ja, so sah es bei mir auch aus, aber wenn du dann ein weiteres ++i anhängst, kommt bei mir 16 (statt der erwarteten 15) heraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724548</guid><dc:creator><![CDATA[NEWc++MAN]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:11:32 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Oo Hab ich noch nicht gewusst... Dachte bisher immer - da der Preinc-op das Rückgeben impliziert, dass das auch (direkt) nacheinander ausgeführt wird...<br />
aber ok - mein fehler ^^</p>
</blockquote>
<p>Über Auswertungsreihenfolgen sollte man nicht zu fest spekulieren, geschweige denn Code davon abhängig machen. Das Problem gibt es nicht nur bei arithmetischen Ausdrücken, sondern zum Beispiel auch bei Funktionsaufrufen. Das ist auch ein Grund für gewisse merkwürdig erscheinende Schnittstellen bei Boost, weil Exceptionsicherheit unabhängig von der Parameter-Auswertungsreihenfolge garantiert werden soll.</p>
<p>NEWc++MAN schrieb:</p>
<blockquote>
<p>ja, so sah es bei mir auch aus, aber wenn du dann ein weiteres ++i anhängst, kommt bei mir 16 (statt der erwarteten 15) heraus.</p>
</blockquote>
<p>Nochmals: Da gibt es <strong>nichts zu erwarten</strong>, das Verhalten ist schlicht und einfach <strong>undefiniert!</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724552</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:12:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wie knivil schon richtig bemerkte ist das Verhalten undefiniert und deshalb ist<br />
es müßig darüber zu reden was bei wem rauskommt. Jede Reaktion ist aus Sicht<br />
des Standards ok.</p>
<p>Eines meiner Lieblingszitate aus dem C++ Standard:</p>
<blockquote>
<p>Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored</p>
</blockquote>
<p>Und natürlich gibt's da auch was von Wikipedia:<br />
<a href="http://en.wikipedia.org/wiki/Sequence_point" rel="nofollow">http://en.wikipedia.org/wiki/Sequence_point</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724554</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:17:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nochmals: Da gibt es <strong>nichts zu erwarten</strong>, das Verhalten ist schlicht und einfach <strong>undefiniert!</strong></p>
</blockquote>
<p>Naja, undefiniert wohl nicht, aber schwer voraus zusagen. Denn nach irgendwelchen Regeln wird das schon ausgewertet, aber die Möglichkeiten sind wohl zahlreich.</p>
<p>Aber so undefiniert wie ein Zugriff auf Speicherstelle xyz wird es nicht sein. Ein Ergebnis von -56439 z.B. wird es nie geben. Auf ein und dem selben Compiler bei den selben Einstellungen wird das Ergebnis immer gleich bleiben.</p>
<p>(Vermute ich^^ ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724562</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:26:00 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Nochmals: Da gibt es <strong>nichts zu erwarten</strong>, das Verhalten ist schlicht und einfach <strong>undefiniert!</strong></p>
</blockquote>
<p>Naja, undefiniert wohl nicht, aber schwer voraus zusagen. Denn nach irgendwelchen Regeln wird das schon ausgewertet, aber die Möglichkeiten sind wohl zahlreich.</p>
<p>Aber so undefiniert wie ein Zugriff auf Speicherstelle xyz wird es nicht sein. Ein Ergebnis von -56439 z.B. wird es nie geben. Auf ein und dem selben Compiler bei den selben Einstellungen wird das Ergebnis immer gleich bleiben.</p>
<p>(Vermute ich^^ ;))</p>
</blockquote>
<p>Nein, es ist undefiniert. Vor allem, da mit mit einem Ergebnis nachfolgend noch irgendwie weiterarbeitet (z.B. ein Array indiziert)...</p>
<p>Ich zitiere nochmal den Standard:</p>
<p>SO/IEC 14882:2003 schrieb:</p>
<blockquote>
<p>Except where noted, the order of evaluation of operands of individual operators and subexpressions of indi-<br />
vidual expressions, and the order in which side effects take place, is unspecified.<br />
53)<br />
Between the previous<br />
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation<br />
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.<br />
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full<br />
expression; otherwise the behavior is undefined.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1724568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724568</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:24:38 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Naja, undefiniert wohl nicht, aber schwer voraus zusagen.</p>
</blockquote>
<p>Nach dem Standard ist das Verhalten &quot;unspecified&quot;, was so viel bedeutet wie compiler-abhängig, aber der Compiler braucht es nicht zu dokumentieren. Da man sich auf rein keine Regeln verlassen kann, ist das Verhalten so gut wie undefiniert.</p>
<p>Übrigens ist es auch nicht Zufall, was im Speicher steht. Es hängt vielleicht von etwas mehr Faktoren ab, aber theoretisch wäre es auch deterministisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724569</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to dekrementieren on Wed, 10 Jun 2009 14:27:43 GMT]]></title><description><![CDATA[<p>Der Standard ist Müll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724575</guid><dc:creator><![CDATA[und was lernt man]]></dc:creator><pubDate>Wed, 10 Jun 2009 14:27:43 GMT</pubDate></item></channel></rss>