<?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[Frage zu &amp;lt;&amp;lt;]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>warum geht:<br />
cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot;;<br />
und<br />
cout &lt;&lt; myfunc() &lt;&lt; myfunc() &lt;&lt; myfunc();<br />
gibt Probleme bei der Auswertungsreihenfolge?</p>
<p>Vielen Dank</p>
<p>Persy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254501/frage-zu-lt-lt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 10:21:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254501.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Nov 2009 09:33:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 09:33:29 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>warum geht:<br />
cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot;;<br />
und<br />
cout &lt;&lt; myfunc() &lt;&lt; myfunc() &lt;&lt; myfunc();<br />
gibt Probleme bei der Auswertungsreihenfolge?</p>
<p>Vielen Dank</p>
<p>Persy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809215</guid><dc:creator><![CDATA[Persy]]></dc:creator><pubDate>Tue, 17 Nov 2009 09:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 09:35:40 GMT]]></title><description><![CDATA[<p>Weil es darauf ankommt was myfunc() zurück gibt, genauer gesagt welchen Typ es zurück gibt. Wenn es keiner der Standardtypen ist, mußt du den &lt;&lt;-Operator für ostream überladen, was sehr einfach ist. Dann funktioniert das auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809219</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 17 Nov 2009 09:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 09:39:54 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Weil es darauf ankommt was myfunc() zurück gibt, genauer gesagt welchen Typ es zurück gibt. Wenn es keiner der Standardtypen ist, mußt du den &lt;&lt;-Operator für ostream überladen, was sehr einfach ist. Dann funktioniert das auch.</p>
</blockquote>
<p>Auch mit Standardtypen funktioniert es nicht, sondern wird stack-mäßig von hinten aufgerollt. Ich kriege also die genau umgekehrte Reihenfolge. Zumindest beim MS-Compiler (keine Ahnung, ob sowas implementierungsspezifisch ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809222</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 17 Nov 2009 09:39:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 09:47:09 GMT]]></title><description><![CDATA[<p>Persy schrieb:</p>
<blockquote>
<p>warum geht:<br />
cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot;;<br />
und<br />
cout &lt;&lt; myfunc() &lt;&lt; myfunc() &lt;&lt; myfunc();</p>
</blockquote>
<p>Weil operator&lt;&lt;() den Stream als Ergebnis liefert:</p>
<pre><code class="language-cpp">std::stream &amp;operator&lt;&lt;(std::stream &amp;lhs, const char *rhs) {

   // rhs nach lhs ausgeben

   return lhs;
}
</code></pre>
<p>Persy schrieb:</p>
<blockquote>
<p>gibt Probleme bei der Auswertungsreihenfolge?</p>
</blockquote>
<p>Edit: S. _matze und Artchi</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809223</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Tue, 17 Nov 2009 09:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 09:59:51 GMT]]></title><description><![CDATA[<p>Persy schrieb:</p>
<blockquote>
<p>warum geht:<br />
cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot;;<br />
und<br />
cout &lt;&lt; myfunc() &lt;&lt; myfunc() &lt;&lt; myfunc();<br />
gibt Probleme bei der Auswertungsreihenfolge?</p>
</blockquote>
<p>Was für Probleme denn? Ich rate mal, dass Dein myfunc Seiteneffekte besitzt und unterschiedliche Ergebnisse liefert. ZB so etwas:</p>
<pre><code class="language-cpp">int myfunc()
{
  static int i=0;
  return ++i;
}
</code></pre>
<p>Und wahrscheinlich würdest Du hier folgende Ausgabe erwarten:</p>
<pre><code>123
</code></pre>
<p>Allerdings wird nirgendswo im C++ Standard festgelegt (bis auf ein paar Ausnahmen), in welcher Reihenfolge <strong>Teil</strong>ausdrücke ausgewertet werden. Daher kannst Du Dich hier auf nichts verlassen.</p>
<p>Der Compiler kann das intern so zerlegen</p>
<pre><code class="language-cpp">tmp1 = myfunc()
tmp2 = myfunc()
tmp3 = myfunc()
       cout &lt;&lt; tmp1 &lt;&lt; tmp2 &lt;&lt; tmp3
</code></pre>
<p>oder aber so</p>
<pre><code class="language-cpp">tmp3 = myfunc()
tmp2 = myfunc()
tmp1 = myfunc()
       cout &lt;&lt; tmp1 &lt;&lt; tmp2 &lt;&lt; tmp3
</code></pre>
<p>oder aber so</p>
<pre><code class="language-cpp">tmp2 = myfunc()
tmp1 = myfunc()
sref = cout &lt;&lt; tmp1 &lt;&lt; tmp2
tmp3 = myfunc()
       sref &lt;&lt; tmp3
</code></pre>
<p>...ist alles erlaubt...</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809230</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 17 Nov 2009 09:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 10:23:06 GMT]]></title><description><![CDATA[<p>Das war gerade in der Vorlesung. Es hieß die Reihenfolge der Abarbeitung wäre nicht genau definiert. Hier ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std; 

char myfunc(int a) {
    return (char)(64 + a);
}

int main() {
	cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot; &lt;&lt; endl;
	cout &lt;&lt; myfunc(1) &lt;&lt; myfunc(2) &lt;&lt; myfunc(3) &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Es funktioniert jedoch wie vorgesehen (g++ Kompiler): &quot;abc&quot; und dann &quot;ABC&quot;<br />
Habt Ihr ne Ahnung was da gemeint ist?</p>
<p>EDIT: Ich sehe gerade Sebastians Antwort. Wenn die Auswertungsreihenfolge unklar ist, wäre das aber nicht intuitiv. Laut Matze würde der MS Kompiler CBA ausegeben. Das wäre ziemlich unerwartet. Wenn der Prof das in der Vorlesung extra erwähnt hat muß man sich bei C++ wohl daran gewöhnen...</p>
<p>Vielen Dank <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>Persy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809249</guid><dc:creator><![CDATA[Persy]]></dc:creator><pubDate>Tue, 17 Nov 2009 10:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 10:30:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

char glob='A';

char myfunc(int a) {
    return glob++;
}

int main() {
    cout &lt;&lt; &quot;a&quot; &lt;&lt; &quot;b&quot; &lt;&lt; &quot;c&quot; &lt;&lt; endl;
    cout &lt;&lt; myfunc(1) &lt;&lt; myfunc(2) &lt;&lt; myfunc(3) &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Ausgabe CBA<br />
Und jetzt denk nach, warum Dein Prog bei jeder Auswertungsreihenfolge ABC ausgibt und deswegen gar kein diesbezüglicher Test ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809258</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 17 Nov 2009 10:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu &amp;lt;&amp;lt; on Tue, 17 Nov 2009 11:04:03 GMT]]></title><description><![CDATA[<p>Stimmt, CBA jetzt auch bei mir. Da habe ich die static oder globale Veriable vergessen. Wie bei Volkard ist es richtig. In Unterausdrücke werden also bei beiden Kompilern in umgekehrter Reihenfolge (also von rechts nach links) ausgewertet.</p>
<p>Vielen Dank <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>Persy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809286</guid><dc:creator><![CDATA[Persy]]></dc:creator><pubDate>Tue, 17 Nov 2009 11:04:03 GMT</pubDate></item></channel></rss>