<?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[Vererbungsproblem]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem das sich aus dem Ableiten von Klassen ergibt. Und zwar möchte ich einem Menü diverse Children hinzufügen können. Diese Children können alle möglichen Controls sein, die alle von der Klasse FrameworkElement abgeleitet sind. Z.B. MenuItems, aber auch TextLabels usw. Wenn das Child allerdings ein MenuItem ist möchte ich dass hier exemplarisch die Funktion SetChecked(true), die nur Member von der Klasse MenuItem ist, aufgerufen wird:</p>
<pre><code>void Menu::AddChild(FrameworkElement *child)
{
        ...
	MenuItem *menuItem = ((MenuItem*)child);
	if (menuItem != NULL)
	menuItem-&gt;SetChecked(true);
}
</code></pre>
<p>Leider stürzt mein Programm so immer ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278266/vererbungsproblem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 04:19:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278266.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Dec 2010 20:01:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 20:28:08 GMT]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem das sich aus dem Ableiten von Klassen ergibt. Und zwar möchte ich einem Menü diverse Children hinzufügen können. Diese Children können alle möglichen Controls sein, die alle von der Klasse FrameworkElement abgeleitet sind. Z.B. MenuItems, aber auch TextLabels usw. Wenn das Child allerdings ein MenuItem ist möchte ich dass hier exemplarisch die Funktion SetChecked(true), die nur Member von der Klasse MenuItem ist, aufgerufen wird:</p>
<pre><code>void Menu::AddChild(FrameworkElement *child)
{
        ...
	MenuItem *menuItem = ((MenuItem*)child);
	if (menuItem != NULL)
	menuItem-&gt;SetChecked(true);
}
</code></pre>
<p>Leider stürzt mein Programm so immer ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989305</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Thu, 02 Dec 2010 20:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 20:12:53 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du mit C++ nicht die geringste Erfahrung hast?</p>
<pre><code class="language-cpp">MenuItem *menuItem = ((MenuItem*)child); // C-Style-Cast, in C++ heisst das `static_cast&lt;MenuItem*&gt;(child)'
if (menuItem != NULL)                    // menuItem hat genau den gleichen Wert wie child, egal ob der Typ stimmt
                                         // NULL ist übrigens sehr C-typisch (auch wenn man es nicht mal in C in diesem
                                         // Zusammenhang verwenden würde), in C++ schreibt man `if (menuItem)'
    menuItem-&gt;SetIsTopLevelItem(true);   // hässlicher Funktionsname, laut deinem Text sollte es `SetChecked' heissen
                                         // Wenn child kein MenuItem ist, wird dein Programm hier meistens abstürzen
</code></pre>
<p>Das, was du willst geht zwar mit <code>typeid()</code> , aber davon lässt du lieber die Finger und behandelst alle <code>FrameworkElement</code> e gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989312</guid><dc:creator><![CDATA[Schüler93]]></dc:creator><pubDate>Thu, 02 Dec 2010 20:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 20:30:33 GMT]]></title><description><![CDATA[<p>Na gut, dann schreibe ich halt:</p>
<pre><code>void Menu::AddChild(FrameworkElement *child)
{
        ...
    MenuItem *menuItem = static_cast&lt;MenuItem*&gt;(child);
    if (menuItem)
    menuItem-&gt;SetChecked(true);
}
</code></pre>
<p>Dass das ganze abstürzt habe ich übrigens selber festgestellt, darum habe ich ja gefragt wie man es richtig macht.<br />
Wie meinst du das mit alle FrameworkElemente gleich behandeln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989316</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Thu, 02 Dec 2010 20:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 20:43:19 GMT]]></title><description><![CDATA[<p>Bis jetzt waren das alles optische Änderungen ohne den Inhalt zu verändern.<br />
Wenn du anstatt static_cast dynamic_cast schreibst, klappt das, was du willst.<br />
Aber ich rate davon ab, da schlechter Stil.</p>
<p>Das mit alle gleich behandeln heisst, schmeiss den ganzen gezeigten Code-Teil raus und pfeif darauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989327</guid><dc:creator><![CDATA[Schüler93]]></dc:creator><pubDate>Thu, 02 Dec 2010 20:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 21:15:06 GMT]]></title><description><![CDATA[<p>Das ist leider nicht so einfach. Die MenuItems die sozusagen die Rootelemente, also die direkten Children des Menüs sind müssen das auch gesagt bekommen, da sie ein anderes Verhalten haben wie die übrigen MenuItems. Und das geht nur an dieser Stelle, wo ich sie dem Menü hinzufüge.</p>
<p>PS: Was heißt schlechter Stil genau? Z.B. Speicherintensiv, Fehleranfällig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989347</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Thu, 02 Dec 2010 21:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 21:23:55 GMT]]></title><description><![CDATA[<p>Lass dich nicht verunsichern, der Weg sieht schon mal gut aus. Das ist VCL, nehme ich an? Lass dich wenn ja dort hin verschieben, dort wird dir am ehesten geholfen. <code>dynamic_cast</code> ist übrigens hier wirklich sinnvoll, weil es zusätzlich den Typ prüft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989352</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Thu, 02 Dec 2010 21:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 21:26:57 GMT]]></title><description><![CDATA[<p>Man versucht in C++ dynamic_casts zu vermeiden. Ich sehe das aber etwas lockerer; wenn mans nicht übertreibt, ist dynamic_cast schon ok. Man sollte sich halt vorher nur überlegen, ob man an der Stelle WIRKLICH einen dynamic_cast braucht.<br />
Zum Beispiel könntest FrameworkElement eine virtuelle Methode SetChecked() mit leerem Rumpf geben - finde ich allerdings noch unschöner als dynamic_cast. Alternativ kannst du dir auch überlegen, ob du vllt nicht einen Zeiger auf FrameworkElement (der Name ist übrigens ziemlich nichtssagend) übergibst, sondern einen Zeiger auf eine Subklasse von FrameworkElement, die eine virtuelle Methode SetChanged() besitzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989355</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Thu, 02 Dec 2010 21:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 02 Dec 2010 22:07:26 GMT]]></title><description><![CDATA[<p>Ok, funktioniert jetzt wunderbar. Auch das hinzufügen von z.B. TextLabels funktioniert und führt keinen Absturz herbei.</p>
<p>Nochmal ne Frage zu der Nicht-Verwendung von NULL. Wenn ich einen Zeiger</p>
<pre><code>SubMenu *m_pSubMenu;
</code></pre>
<p>habe, brauche ich den wahrscheinlich auch nicht bei der Initialisierung der Klasse auf NULL setzen, oder?</p>
<pre><code>m_pSubMenu = NULL;
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/797">@Nick</a> Unbekannt<br />
Nene ist kein VCL, ich schreibe eine eigene Library auf Basis von OpenGL.</p>
<p>@this-&gt;that<br />
Ein leerer Funktionsrumpf wäre noch eine Idee, allerdings gefällt mir das dynamic cast dann doch besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989370</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Thu, 02 Dec 2010 22:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 11:05:33 GMT]]></title><description><![CDATA[<p>Student83 schrieb:</p>
<blockquote>
<p>Nochmal ne Frage zu der Nicht-Verwendung von NULL. Wenn ich einen Zeiger</p>
<pre><code>SubMenu *m_pSubMenu;
</code></pre>
<p>habe, brauche ich den wahrscheinlich auch nicht bei der Initialisierung der Klasse auf NULL setzen, oder?</p>
<pre><code>m_pSubMenu = NULL;
</code></pre>
</blockquote>
<p>Man nimmt einfach `0':</p>
<pre><code class="language-cpp">SubMenu *m_pSubMenu = 0;
</code></pre>
<p>Das macht aber auch niemand, weil es die Initialisierungsliste gibt, die alles effizienter und etwas kürzer macht:</p>
<pre><code class="language-cpp">MenuItem::MenuItem() // Konstruktor halt
  : m_pSubMenu(0), // Doppelpunkt und dann member0(wert0), member1(wert1),..., memberN(wertN) { ... }
    m_bIsChecked(false) {
  // hier ist's dann meistens leer.
}
</code></pre>
<p>Ich könnte mich jetzt noch über deine UN beschweren, über mangelnde Kenntnis vom Geist von C++ und über die daraus entstehenden Designfehler wie den dynamic_cast (hier jetzt, zugegeben, die einfachste Lösung), aber ich lasse es besser darauf beruhen.</p>
<p>In C++0x gibts für spezielle Fälle eine Alternative zu 0, wenn du beispielsweise die überladene Funktion foo() vor dir hast:</p>
<pre><code class="language-cpp">void foo(int i) { }
void foo(void *p) { }

foo(0); // wie kann ich foo(void *) aufrufen?
// bis jetzt:
foo((void *)0);
// ab C++0x (oder auch jetzt möglich mit templates):
foo(nullptr);
</code></pre>
<p>Ob man das dann konsequent verwenden soll, ist die andere Frage, aber auf jeden Fall _nicht_ mit Makros wie NULL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989477</guid><dc:creator><![CDATA[Schüler93]]></dc:creator><pubDate>Fri, 03 Dec 2010 11:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 11:18:45 GMT]]></title><description><![CDATA[<p>Das ist Unsinn. Der Typ <code>0 != (void*)0</code> das ist aber genau die Bedeutung die NULL in C++ hat. Auch gibt es keine Notwendigkeit, dass <code>NULL == false</code> sein muss. Die Adresse 0x0 kann auf einem System genauso gültig sein, wie jede andere Adresse. Eine Überprüfung auf NULL ist somit sogar richtiger, als eine Überprüfung auf false. Ganz davon abgesehen, dass bei strikter Prüfung weder <code>void * foo = 0</code> erlaubt ist, noch <code>*foo</code> als Boolean-Typ interpretiert werden darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989482</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Fri, 03 Dec 2010 11:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 11:52:09 GMT]]></title><description><![CDATA[<p>Ich bin nicht der Meinung, dass man die Verwendung von NULL verteufeln sollte. Jedoch kann dies zu Unklarheiten und Fehlern führen. Das Makro ist wie folgt definiert:</p>
<pre><code class="language-cpp">#ifndef NULL 
#ifdef __cplusplus 
#define NULL 0 
#else 
#define NULL ((void *)0) 
#endif 
#endif
</code></pre>
<pre><code class="language-cpp">//Somit ist in C 
NULL = ((void *)0)
//und in C++ 
NULL = 0
</code></pre>
<p>wie vorher erwähnt kommt bald der nullptr dazu. Dieser wird aus Kompatibilitätsgründen nicht NULL ersetzen, sondern ein eigener typ werden. Dann kann man sowas machen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::cout;

void foo(char *chr){cout &lt;&lt; &quot;char\n&quot;;}
void foo(int i){cout &lt;&lt; &quot;int\n&quot;;}

int main()
{ 
	foo(nullptr); //Anstelle von: &quot;foo((char *)0);&quot;
	foo(NULL);

	system(&quot;pause&quot;);
	return 0; 
}
</code></pre>
<p>Spätestens Jetzt wurden mehr Unklarheiten geschaffen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Hier noch ein schöner Link zur Problematik:<br />
<a href="http://www.devx.com/cplus/10MinuteSolution/35167/1954" rel="nofollow">http://www.devx.com/cplus/10MinuteSolution/35167/1954</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989488</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Fri, 03 Dec 2010 11:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 13:44:25 GMT]]></title><description><![CDATA[<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Die Adresse 0x0 kann auf einem System genauso gültig sein, wie jede andere Adresse.</p>
</blockquote>
<p>Nein, kann sie nicht. C++ garantiert, dass das Integer-Literal <code>0</code> (und damit auch die hexadezimale Variante) in einen Nullzeiger konvertiert werden kann.</p>
<p>4.10/1 Pointer conversions schrieb:</p>
<blockquote>
<p>A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type.</p>
</blockquote>
<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Ganz davon abgesehen, dass bei strikter Prüfung weder <code>void * foo = 0</code> erlaubt ist, noch <code>*foo</code> als Boolean-Typ interpretiert werden darf.</p>
</blockquote>
<p>Wie gesagt ist</p>
<pre><code class="language-cpp">void* ptr = 0;
</code></pre>
<p>sehr wohl erlaubt, Gleiches gilt für die Interpretation als <code>bool</code> . Sonst würde</p>
<pre><code class="language-cpp">if (ptr)
</code></pre>
<p>nicht funktionieren. Quelle:</p>
<p>4.12/1 Boolean conversions schrieb:</p>
<blockquote>
<p>An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1989537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989537</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 13:52:53 GMT]]></title><description><![CDATA[<p>Zur Verwendung von <code>NULL</code> :</p>
<p>Ich persönlich benutze momentan</p>
<pre><code class="language-cpp">// Teilweiser Workaround für sicheren Nullzeiger
// Die globale Variable nullptr kann in vielen Fällen als Nullzeiger-Literal verwendet werden.
// Einschränkungen gibt es bei Memberfunktionszeigern.
const class nullptr_t
{
	public:
		// Konvertierbar in Zeigertypen
		template &lt;typename T&gt;
		operator T* () const
		{
			return 0;
		}

		// Konvertierbar in Zeiger auf Member
        template &lt;class C, typename T&gt; 
        operator T C::* () const 
        { 
            return 0; 
        } 

	private:	
		// Nicht adressierbar
		void* operator&amp; ();

} nullptr = {};
</code></pre>
<p>oder in einer Bibliothek noch <code>NULL</code> , um nicht zu viele Leute zu verwirren. Mir ist <code>NULL</code> immer noch lieber als <code>0</code> , weil unmittelbar klar ist, dass es sich um Zeiger handelt. Aber man muss sich dabei bewusst sein, dass man selbst für diese Sicherheit zu sorgen hat (anders bei <code>nullptr</code> , entweder selbstgebaut oder aus C++0x).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989542</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 13:57:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Die Adresse 0x0 kann auf einem System genauso gültig sein, wie jede andere Adresse.</p>
</blockquote>
<p>Nein, kann sie nicht. C++ garantiert, dass das Integer-Literal <code>0</code> (und damit auch die hexadezimale Variante) in einen Nullzeiger konvertiert werden kann.</p>
<p>4.10/1 Pointer conversions schrieb:</p>
<blockquote>
<p>A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type.</p>
</blockquote>
</blockquote>
<p>Das hat allerdings nichts mit Adressen zu tun (und insofern hat Nick unbekannt recht). Schließlich kann ein Zeiger ohnehin nicht (direkt) mit einer bestimmten Adresse initialisiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989543</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 14:14:17 GMT]]></title><description><![CDATA[<p>Vielen Dank für den Hinweis.</p>
<p>Du hast Recht, das Mapping zwischen integralen Typen und tatsächlichen Adressen ist implementierungsabhängig (soweit ich weiss, müsste eine Adresse theoretisch nicht einmal als Ganzzahl dargestellt sein). Wenn ich das richtig verstehe, kann man also gar keine portable Aussage über Adressen treffen, sondern nur über die intergrale Darstellung von ihnen (durch <code>reinterpret_cast</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989552</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 03 Dec 2010 14:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 14:49:10 GMT]]></title><description><![CDATA[<p>@Schüler93<br />
Mit UN meinst du wahrscheinlich die Ungarische Notation. Was ist denn an meinen Bezeichnern &quot;verkehrt&quot;?</p>
<p>Außerdem ist OpenGL ja in C geschrieben, d.h. reines C++ ist also eh nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989565</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Fri, 03 Dec 2010 14:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 14:58:42 GMT]]></title><description><![CDATA[<p>Student83 schrieb:</p>
<blockquote>
<p>@Schüler93<br />
Mit UN meinst du wahrscheinlich die Ungarische Notation. Was ist denn an meinen Bezeichnern &quot;verkehrt&quot;?</p>
</blockquote>
<p>Ich hab vor einiger Zeit <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1773551.html#1773551" rel="nofollow">etwas Ausführlicheres</a> dazu geschrieben.</p>
<p>Student83 schrieb:</p>
<blockquote>
<p>Außerdem ist OpenGL ja in C geschrieben, d.h. reines C++ ist also eh nicht möglich.</p>
</blockquote>
<p>Du kannst trotzdem versuchen, für deine Bibliothek so sauberes C++ wie möglich zu verwenden. <a href="http://www.sfml-dev.org" rel="nofollow">SFML</a> basiert beispielsweise auch auf OpenGL, aber ich würde SFML als eine der Bibliotheken mit modernstem/elegantestem C++-Design bezeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989571</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 03 Dec 2010 14:58:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Fri, 03 Dec 2010 14:58:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int a = 0; 
int b = 0;
if(a++ || b--) 
   b = a;

std::cout &lt;&lt; a &lt;&lt; &quot;\n&quot;;
std::cout &lt;&lt; b &lt;&lt; &quot;\n&quot;;

if(a++ &amp;&amp; b--)
   b = 15;

std::cout &lt;&lt; a &lt;&lt; &quot;\n&quot;;
std::cout &lt;&lt; b &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Ist das Ergebnis definiert oder undefiniert?<br />
Ich habe: 1, -1, 2, 15</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989572</guid><dc:creator><![CDATA[WirklichSchlechterCode]]></dc:creator><pubDate>Fri, 03 Dec 2010 14:58:20 GMT</pubDate></item></channel></rss>