<?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[C-Cast in C++]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nur mal so ne Frage nebenbei:<br />
Verwendet ihr beim Casten von einfachen Datentypen ein<br />
C-Cast oder ein static_cast?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136840/c-cast-in-c</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 18:39:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136840.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Feb 2006 16:13:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 16:13:38 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nur mal so ne Frage nebenbei:<br />
Verwendet ihr beim Casten von einfachen Datentypen ein<br />
C-Cast oder ein static_cast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993204</guid><dc:creator><![CDATA[ChefCaster]]></dc:creator><pubDate>Mon, 13 Feb 2006 16:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 16:17:39 GMT]]></title><description><![CDATA[<p>Ich verwende immer c-casts.<br />
Wollts mir bei Zeiten mal abgewöhnen, aber bis jetzt dreht sich die Erde auch so weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993211</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 13 Feb 2006 16:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 16:20:10 GMT]]></title><description><![CDATA[<p>Nur C-Cast?<br />
Kann man dann überhaupt alles implementieren?<br />
Nen C-Cast macht doch nie nen dynamic_cast, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993214</guid><dc:creator><![CDATA[ChefCaster]]></dc:creator><pubDate>Mon, 13 Feb 2006 16:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 16:30:14 GMT]]></title><description><![CDATA[<p>Nö, er reinterpretiert. Das langt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993226</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 13 Feb 2006 16:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 16:32:56 GMT]]></title><description><![CDATA[<p>SeppSchrot schrieb:</p>
<blockquote>
<p>Nö, er reinterpretiert. Das langt.</p>
</blockquote>
<p>falsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993230</guid><dc:creator><![CDATA[Fehler]]></dc:creator><pubDate>Mon, 13 Feb 2006 16:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 17:56:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ChefCaster schrieb:</p>
<blockquote>
<p>Verwendet ihr beim Casten von einfachen Datentypen ein<br />
C-Cast oder ein static_cast?</p>
</blockquote>
<p>ich verwende nur die C++ Casts. Nicht nur, dass man auch weiß, wie gerade gecastet wird, man sieht den Cast im Source auch besser als den C-Cast.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993305</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 13 Feb 2006 17:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 21:39:03 GMT]]></title><description><![CDATA[<p>ChefCaster schrieb:</p>
<blockquote>
<p>Nen C-Cast macht doch nie nen dynamic_cast, oder?</p>
</blockquote>
<p>Das ist richtig, allerdings brauchst du dynamic_cast so gut wie nie. Leider verwenden viele Leute den Cast zu leichtfertig und unbedacht. Dennoch, C-Casts sollte man deswegen trotzdem nicht verwenden.</p>
<p>ChefCaster schrieb:</p>
<blockquote>
<p>Verwendet ihr beim Casten von einfachen Datentypen ein<br />
C-Cast oder ein static_cast?</p>
</blockquote>
<pre><code>|| 
 || 
 || 
\  /
 \/  :D
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/993557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993557</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 13 Feb 2006 21:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 21:58:19 GMT]]></title><description><![CDATA[<p>Wann brauch man denn einen dynamic_cast?<br />
Kann mir einer mal nen Beispiel geben, wo ein static_cast nicht ausreicht...</p>
<p>Ich z. Bsp. dachte immer, wenn ich ne Klasse zu einer<br />
anderen Klasse caste, die über die Vererbunghierarchie keine<br />
direkte Verküpfung haben:</p>
<pre><code class="language-cpp">class A{
}

class C {
}

class B : public C{
}
</code></pre>
<p>Also hier, wenn ich von A nach C caste oder umgekehrt...</p>
<p>Gruß,<br />
dyncast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993561</guid><dc:creator><![CDATA[dyncast]]></dc:creator><pubDate>Mon, 13 Feb 2006 21:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Mon, 13 Feb 2006 22:45:29 GMT]]></title><description><![CDATA[<p>Ne, so funktioniert das nicht. dynamic_cast kannst du auch nur in der Vererbungshierarchie verwenden. Genauer gesagt, man verwendet dynamic_cast eigentlich nur für den Downcast. Und auch nur dann, wenn du dir nicht sicher bist, von welcher abgeleiteten Klasse das Objekt ist. Ansonsten reicht für den Downcast auch static_cast. Ein sinnvolles Beispiel für dynamic_cast kann ich dir leider nicht geben, da ich versuche, es schlichtweg zu vermeiden. Und das hat bis jetzt auch ganz gut geklappt. Was aber nicht heissen soll, dass es keine sinnvollen Verwendungen für dynamic_cast gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993588</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 13 Feb 2006 22:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 00:05:01 GMT]]></title><description><![CDATA[<p>Für cross-casts braucht man den dynamic-cast unbedingt:</p>
<p>class A;<br />
class B : public A;<br />
class C : public A;<br />
class D : public B,C</p>
<p>Der dynamic-cast kann jetzt einen Pointer vom Typ B*, der auf ein Objekt der Klasse D zeigt korrekt in einen Pointer vom Typ C* umwandeln. Das kann der static_cast garnicht können.</p>
<p>Ob man sowas wirklich braucht ist ne andere Frage. Mir ist es noch nicht begegnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993607</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 14 Feb 2006 00:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 08:41:13 GMT]]></title><description><![CDATA[<p>Fehler schrieb:</p>
<blockquote>
<p>SeppSchrot schrieb:</p>
<blockquote>
<p>Nö, er reinterpretiert. Das langt.</p>
</blockquote>
<p>falsch</p>
</blockquote>
<p>Nö, nur teilweise falsch. Ein C-Cast macht je nach Kontext einen static_, einen const_ und/oder einen reinterpret_cast (aber nie dynamic). Sind für einen static_cast nicht genug Informationen vorhanden, so wird einfach ein reinterpret_cast gemacht, ohne dass man das dem Code ansehen könnte oder eine Compiler-Warnung ausgegeben wird. Wird beispielsweise ein Zeiger in einer Klassenhierarchie hoch- und runter-gecastet (Sinnhaftigkeit steht mal nicht zur Diskussion) und es stehen nur Forward-Deklarationen zur Verfügung (sprich, die Vererbungsbeziehung ist an dieser Stelle vor'm Compiler versteckt), so würde der static_cast einen Compiler-Fehler verursachen, weil er das Offset für den Zeiger nicht ausrechnen kann. Der C-Cast hingegen würde dann einfach einen reinterpret_cast machen, weil der static_cast nicht klappt. Dass das fatale Konsequenzen hat (und ziemlich unmöglich zu findende Fehler), sollte klar sein.</p>
<p>Das gefährliche am C-Cast ist eben genau, dass er je nach Kontext seine Semantik ändert. Dagegen haben die C++-Casts eine eindeutige Semantik und schlagen fehl, wenn das Gewünschte nicht klappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993674</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 14 Feb 2006 08:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 08:42:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/324">@Jester</a>:<br />
Welche Rolle spielt A in deinem Beispiel?</p>
<p>btw:<br />
Brauch man für ein &quot;instanceof&quot; nicht einen dynamic_cast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993677</guid><dc:creator><![CDATA[dyncast]]></dc:creator><pubDate>Tue, 14 Feb 2006 08:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 08:51:29 GMT]]></title><description><![CDATA[<p>&quot;instanceof&quot; ist genau die Situation &quot;Genauer gesagt, man verwendet dynamic_cast eigentlich nur für den Downcast. Und auch nur dann, wenn du dir nicht sicher bist, von welcher abgeleiteten Klasse das Objekt ist.&quot; (Zitat groovemaster) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und ein &quot;instanceof&quot; ausserhalb irgendeiner Vererbungshierarchie (a la &quot;dieses void* ist ein std::string*&quot;) geht sowieso nicht und würde auch keiner machen wollen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/993688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993688</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 14 Feb 2006 08:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 11:05:42 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Fehler schrieb:</p>
<blockquote>
<p>SeppSchrot schrieb:</p>
<blockquote>
<p>Nö, er reinterpretiert. Das langt.</p>
</blockquote>
<p>falsch</p>
</blockquote>
<p>Nö, nur teilweise falsch. [...]</p>
</blockquote>
<p>Nö, die Aussage ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993806</guid><dc:creator><![CDATA[Falsch]]></dc:creator><pubDate>Tue, 14 Feb 2006 11:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 15:54:59 GMT]]></title><description><![CDATA[<p>Jungs ich will ja nix sagen aber das mit dem Unterschied zwischen dynamic_cast und static_cast solltet ihr euch wirklich nochmal in einem guten Buch reinziehen...</p>
<p>Der dynamic_cast ist eine Überprüfung zur <strong>Laufzeit</strong>. Der static_cast ist eine Überprüfung zur <strong>Compilierzeit</strong>.</p>
<p>Gerade wenn ihr mit Schnittstellen arbeitet und während das Programm läuft feststellen wollt ob ihr auch das Objekt vom richtigen Typ am Wickel habt (oder überhaupt ein gültiges wenn mal wieder jemand vergessen hat einen Pointer richtig zu initialisieren) dann helfen euch static_cast nicht sonderlich viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994079</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Tue, 14 Feb 2006 15:54:59 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 17:59:20 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Für cross-casts braucht man den dynamic-cast unbedingt:</p>
<p>class A;<br />
class B : public A;<br />
class C : public A;<br />
class D : public B,C</p>
<p>Der dynamic-cast kann jetzt einen Pointer vom Typ B*, der auf ein Objekt der Klasse D zeigt korrekt in einen Pointer vom Typ C* umwandeln. Das kann der static_cast garnicht können.</p>
</blockquote>
<p>Wieso soll das static_cast nicht können?</p>
<pre><code class="language-cpp">B* foo = new D;
C* bar = static_cast&lt;D*&gt;(foo);
</code></pre>
<p>Oder hab ich dich irgendwie falsch verstanden?</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Jungs ich will ja nix sagen aber das mit dem Unterschied zwischen dynamic_cast und static_cast solltet ihr euch wirklich nochmal in einem guten Buch reinziehen...</p>
<p>Der dynamic_cast ist eine Überprüfung zur <strong>Laufzeit</strong>. Der static_cast ist eine Überprüfung zur <strong>Compilierzeit</strong>.</p>
</blockquote>
<p>Und worauf bezieht sich das?<br />
Btw, Casts sind keine Überprüfungen. dynamic_cast macht das auch nur nebenbei, um ggf eine Exception zu werfen oder einen Nullzeiger zurückzugeben. Und static_cast kann ebenfalls Laufzeit kosten.</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Gerade wenn ihr mit Schnittstellen arbeitet und während das Programm läuft feststellen wollt ob ihr auch das Objekt vom richtigen Typ am Wickel habt (oder überhaupt ein gültiges wenn mal wieder jemand vergessen hat einen Pointer richtig zu initialisieren) dann helfen euch static_cast nicht sonderlich viel.</p>
</blockquote>
<p>Das widerspricht sich. Schnittstellen (abstrakte Klassen) sind erstmal generell ein Mittel, um ausgiebige Cast-Orgien zu vermeiden.<br />
Und dynamic_cast um festzustellen, ob ein Zeiger korrekt initialisiert wurde? Schon klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Du ziehst dir auch die Hosen mit der Kneifzange an, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994182</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 14 Feb 2006 17:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Tue, 14 Feb 2006 19:36:29 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<pre><code class="language-cpp">B* foo = new D;
C* bar = static_cast&lt;D*&gt;(foo);
</code></pre>
<p>Oder hab ich dich irgendwie falsch verstanden?</p>
</blockquote>
<p>Und woher weißt du, dass foo ein D ist?<br />
Ändern wir das Beispiel mal:</p>
<pre><code class="language-cpp">B* foo = myFactory.create(); //Der Typ ist hier unbekannt, nur die Basisklasse B ist bekannt
//Um herauszufinden welches Objekt man hat, hilft einem nur dynamic_cast
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/994253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994253</guid><dc:creator><![CDATA[Aber]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Wed, 15 Feb 2006 09:04:41 GMT]]></title><description><![CDATA[<p>Das ist ein Fall für static_cast:</p>
<pre><code class="language-cpp">B* foo = new D;
C* bar = static_cast     &lt;C*&gt; (foo);
</code></pre>
<p>Das ist ein Fall für dynamic_cast:</p>
<pre><code class="language-cpp">void Foo (B * pObject)
{
C* pTempObject = dynamic_cast &lt;C*&gt; (pObject);
}
</code></pre>
<blockquote>
<p>Btw, Casts sind keine Überprüfungen. dynamic_cast macht das auch nur nebenbei, um ggf eine Exception zu werfen oder einen Nullzeiger zurückzugeben. Und static_cast kann ebenfalls Laufzeit kosten.</p>
</blockquote>
<p>Autsch das tut jetzt aber weh.... Natürlich sind Casts keine Überprüfungen aber dies ist der Unterschied zwischen einem C-Cast und static_cast bzw. dynamic_cast. C-Casts sind eine ziemlich unsichere Sache static_casts und dynamic_casts liefern dir eine Rückmeldung obs geklapt hat oder nicht.</p>
<p>Der static_cast macht die Überprüfung während der Code übersetzt wird. Der dynamic_cast führt zu einer Überprüfung wenn das Programm später verwendet wird.</p>
<pre><code class="language-cpp">Das widerspricht sich. Schnittstellen (abstrakte Klassen) sind erstmal generell ein Mittel, um ausgiebige Cast-Orgien zu vermeiden.
</code></pre>
<p>Im Allgemeinen schon, nur ab und zu soll es auch mal vorkommen dass man die Schnittstelle des tatsächlichen Objekttyps braucht und in diesem Fall brauchst du nunmal einen Cast idealerweise mit Typüberprüfung zur Laufzeit (dynamic_cast) und nicht auf gut Glück.</p>
<pre><code class="language-cpp">Und dynamic_cast um festzustellen, ob ein Zeiger korrekt initialisiert wurde? Schon klar.  Du ziehst dir auch die Hosen mit der Kneifzange an, oder?
</code></pre>
<p>Wenn ich dadurch einen Programmabsturz vermeiden kann. Es soll Leute geben, die auch Code von Anderen über Schnittstellen ansprechen. Wenn da Müll geliefert wird muss mans irgendwie abfangen mindestens bis das nächste Patch des Fremdcodes draußen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994543</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Wed, 15 Feb 2006 09:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Wed, 15 Feb 2006 11:16:36 GMT]]></title><description><![CDATA[<p>Aber schrieb:</p>
<blockquote>
<p>Und woher weißt du, dass foo ein D ist?</p>
</blockquote>
<p>Vielleicht solltest du dir mal den ganzen Thread durchlesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Darum ging es nämlich überhaupt nicht. Dass static_cast keine Laufzeitüberprüfungen durchführt, sollte ja bekannt sein. Es ging lediglich um die grundsätzliche Frage, ob es überhaupt möglich ist.</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Im Allgemeinen schon, nur ab und zu soll es auch mal vorkommen dass man die Schnittstelle des tatsächlichen Objekttyps braucht und in diesem Fall brauchst du nunmal einen Cast idealerweise mit Typüberprüfung zur Laufzeit (dynamic_cast) und nicht auf gut Glück.</p>
</blockquote>
<p>Dann ist das aber keine gute Schnittstelle. Diese sollte alles bieten, was ich brauche. Ansonsten kann ich auch gleich alles hardcoded handeln.</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Wenn ich dadurch einen Programmabsturz vermeiden kann. Es soll Leute geben, die auch Code von Anderen über Schnittstellen ansprechen. Wenn da Müll geliefert wird muss mans irgendwie abfangen mindestens bis das nächste Patch des Fremdcodes draußen ist.</p>
</blockquote>
<p>Naja, nichtinitialiserte Zeiger sind immer noch logische Fehler. Über was du hier sprichst, sind letztendlich nichts anderes als zweifelhafte Hacks. Wenn jemand eine lausige Schnittstelle anbietet, dann würde ich ehrlich gesagt die entsprechende Funktonalität nicht nutzen. Ein zurückgelieferter Zeiger, der &quot;evtl. nicht initialisiert sein könnte&quot;, ist für mich immer uninitialisiert. Punkt. Logisch gesehen gibt es nur Null und Zeiger auf ein gültiges Objekt. Alles andere ist nicht definiert und daher nicht zu gebrauchen. Normalerweise sollte ja aber auch eine Doku zur Schnittstelle vorhanden sein, in der alles wissenswerte steht.<br />
Ausserdem, funktioniert dynamic_cast überhaupt problemlos zwischen unterschiedlichen Modulen? Gibt es da einen einheitlichen Standard für RTTI? AFAIK schreibt der C++ Standard da nichts vor. Man kann ja nicht automatisch erwarten, dass jemand eine Bibliothek bereitstellt, die mit dem gleichen Compiler erstellt wurde, den man selbst verwendet.</p>
<p>Aber wie ich bereits erwähnte und wie deine Aussagen auch dokumentieren</p>
<blockquote>
<p>Leider verwenden viele Leute den Cast zu leichtfertig und unbedacht.</p>
</blockquote>
<p>dynamic_cast sollte wirklich nur verwendet werden, wenn es keine andere Möglichkeit gibt. Vorher sollte man sich Gedanken über ein vernünftiges Design machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994679</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:16:36 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Wed, 15 Feb 2006 13:31:22 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2813">@groovemaster</a><br />
Ein gutes Design zeichnet sich nicht dadurch aus, dass man krampfhaft versucht um jeden Preis dynamic_cast aus dem Weg zugehen und dafür Sachen implementiert, die gar nicht gefragt sind.</p>
<p>Eine allgemeine Schnittstelle zu definieren über die man alle möglichen und unmöglichen Attribute und Funktionen der abgeleiteten Klassen verwenden kann ist bei einer etwas komplexeren Aufgabe ein ziemlicher Schlag mich tot.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Logischer Fehler hin, zweifelhafte Hacks her... man gibt nicht hunderte oder taustende von € für Bibliotheken aus um sie dann nachher wegen ein paar Bugs nicht zu benutzen.<br />
Wenn du dir das leisten kannst, dann bitte... die meisten anderen werden versuchen diese trotzdem irgendwie zu nutzen.</p>
<p>Bibliotheken kann man auch mit mehreren Compilern übersetzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Die Gedanken über ein ordentliches Design zu machen bevor man anfängt zu programmieren ist schön und gut, nur was machst du wenn du bereits geschriebenen Code erweitern sollst?<br />
(und das ist normalerweise die Regel)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994837</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Wed, 15 Feb 2006 13:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Wed, 15 Feb 2006 18:03:12 GMT]]></title><description><![CDATA[<p>Mathias schrieb:</p>
<blockquote>
<p>Ein gutes Design zeichnet sich nicht dadurch aus, dass man krampfhaft versucht um jeden Preis dynamic_cast aus dem Weg zugehen und dafür Sachen implementiert, die gar nicht gefragt sind.</p>
</blockquote>
<p>Das hat ja auch niemand behauptet. Nur, zu schnell greift man zu dynamic_cast, weil es einem angebracht erscheint. Aber sich Gedanken über ein gutes Konzept zu machen, fällt dann schnell unter den Tisch. Das ist dann die Feierabend Fraktion, die sich auch noch Programmierer nennen. Die bekommen Syntax und Semantik für ein Programm gerade noch irgendwie hin, aber Ahnung von Softwareentwicklung haben die nicht. Ich weiss aus eigener Erfahrung, dass bei vielen das Design leidet, ganz einfach, weil man praktisch immer unter Zeitdruck steht. Aber ein Grund, guten Stil für Bequemlichkeit einzutauschen, ist das trotzdem nicht. Ich sage ja nicht, dass du dein Design so wählen sollst, dass du kein dynamic_cast brauchst. Aber mit einem vernünftigen Design hast du erst gar nicht die Notwendigkeit, dynamic_cast benutzen zu müssen. Und wenn, dann wirklich nur extrem selten.</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Eine allgemeine Schnittstelle zu definieren über die man alle möglichen und unmöglichen Attribute und Funktionen der abgeleiteten Klassen verwenden kann ist bei einer etwas komplexeren Aufgabe ein ziemlicher Schlag mich tot.</p>
</blockquote>
<p>Nee, du sollst ja nicht alles an die Schnittstelle ziehen, sondern nur das, was man brauchst. Eben das, wofür du sonst dynamic_cast verwenden müsstest.</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Logischer Fehler hin, zweifelhafte Hacks her... man gibt nicht hunderte oder taustende von € für Bibliotheken aus um sie dann nachher wegen ein paar Bugs nicht zu benutzen.</p>
</blockquote>
<p>Tatsächlich? Du hast relativ wenig Ahnung von der Materie, stimmts? Wieso erzählst du das nicht mal Leuten, die Software fürs Finanzwesen oder Automatisierungstechnik schreiben? Wir reden hier nicht über irgendwelche unbedeutenden Bugs, die vielleicht mal einen Button auf irgendeiner Oberfläche eines Hobbyprogrammierers nicht zur Anzeige bringen. Wir reden hier ua auch von hochsensiblen Bereichen, wo jeder Bug fatal sein kann und damit einer zu viel ist. Und wenn der Entwickler der Bibliothek zu blöd ist, den Zeiger korrekt zu initialisieren, ob nun mit einem Objekt oder einem Nullzeiger, dann ist er schlichtweg fehl am Platz. Da kannst du dich drehen und wenden wie du willst, dynamic_cast ist und bleibt an dieser Stelle ein Hack und ist keine saubere Lösung. Für mich wäre deshalb die Bibliothek an dieser Stelle einfach unbrauchbar (auch wenn man idR das ganze wohl trotzdem irgendwie zum Laufen bringen muss <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).</p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Bibliotheken kann man auch mit mehreren Compilern übersetzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Ja, super. Wenn du einen so netten Partner hast, der dir den Quellcode gibt oder die Bibliothek in allen möglichen Formaten zur Verfügung stellt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Mathias schrieb:</p>
<blockquote>
<p>Die Gedanken über ein ordentliches Design zu machen bevor man anfängt zu programmieren ist schön und gut, nur was machst du wenn du bereits geschriebenen Code erweitern sollst?<br />
(und das ist normalerweise die Regel)</p>
</blockquote>
<p>Naja, die Regel ist es mit Sicherheit nicht. Aber das ist ja nur ein weiterer Grund, seiner Anwendung ein sauberes Design zu verpassen, damit die Leute, die es warten oder erweitern müssen, nicht von einer Baustelle zur nächsten gelangen und dabei die eigentliche Aufgabe aus den Augen verlieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995159</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 15 Feb 2006 18:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Thu, 16 Feb 2006 07:24:18 GMT]]></title><description><![CDATA[<blockquote>
<p>Tatsächlich? Du hast relativ wenig Ahnung von der Materie, stimmts?</p>
</blockquote>
<p>Bevor man jemanden unterstellt das er keine Ahnung hat sollte man wissen mit wem man redet.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<blockquote>
<p>Ja, super. Wenn du einen so netten Partner hast, der dir den Quellcode gibt oder die Bibliothek in allen möglichen Formaten zur Verfügung stellt.</p>
</blockquote>
<p>Genau das machen die meisten Leuts, die Bibliotheken verkaufen/bereitstellen wollen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
(Find ich zwar ehrlich gesagt auch ziemlich verrückt, aber so ist das reale Leben.)</p>
<p>Alle anderen Kommentare spar ich mir jetzt mal, ich hab ja sowieso keine Ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995428</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 16 Feb 2006 07:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Thu, 16 Feb 2006 08:03:28 GMT]]></title><description><![CDATA[<p>Mathias schrieb:</p>
<blockquote>
<blockquote>
<p>Tatsächlich? Du hast relativ wenig Ahnung von der Materie, stimmts?</p>
</blockquote>
<p>Bevor man jemanden unterstellt das er keine Ahnung hat sollte man wissen mit wem man redet.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Die Unterstellung, dass hier einige Leute keine Ahnung haben kam wohl zuerst von deiner Seite. Du musst dich also nicht wundern wenn da was zurück kommt. Du hast dich den Argumenten mit &quot;aber in der Praxis blabla&quot; entgegen gestellt. Was du in der Praxis machst weil irgendwelche Bibilotheken scheiße designed sind muss hier aber nicht als guter Stil verkauft werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995455</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Thu, 16 Feb 2006 08:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Thu, 16 Feb 2006 08:29:40 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Naja, die Regel ist es mit Sicherheit nicht. Aber das ist ja nur ein weiterer Grund, seiner Anwendung ein sauberes Design zu verpassen, damit die Leute, die es warten oder erweitern müssen, nicht von einer Baustelle zur nächsten gelangen und dabei die eigentliche Aufgabe aus den Augen verlieren.</p>
</blockquote>
<p>Bis du dir sicher, dass das nicht die Regel ist? Ich hab bisher immer nur bestehende Systeme gewartet oder neue Teilmodule geschrieben. Und da war die Kreativität durch die Umgebung schon eingeschränkt, da man zum Rest des Systems passen musste.</p>
<p>Davon, dass etwas von Grund auf neu designt wurde, hab ich noch nicht gehört. Auch nicht in meiner Umgebung, die Software schreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995476</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Thu, 16 Feb 2006 08:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Thu, 16 Feb 2006 08:46:18 GMT]]></title><description><![CDATA[<p>Ponto schrieb:</p>
<blockquote>
<p>Bis du dir sicher, dass das nicht die Regel ist? Ich hab bisher immer nur bestehende Systeme gewartet oder neue Teilmodule geschrieben. Und da war die Kreativität durch die Umgebung schon eingeschränkt, da man zum Rest des Systems passen musste.</p>
<p>Davon, dass etwas von Grund auf neu designt wurde, hab ich noch nicht gehört. Auch nicht in meiner Umgebung, die Software schreibt.</p>
</blockquote>
<p>Ein Produkt in dem Jahre an Entwicklung stecken schreibt man ja auch nicht von heute auf morgen neu. Aber wenn man neue Projekte beginnt, dann sollte man es IMHO weitestgehend vermeiden die alten Fehler nochmal zu machen. Auch arbeiten Termindruck usw. der eigenen Kreativität entgegen. Aber man muss wohl einen guten Kompromiss zwischen Wartbarkeit und zeitsparenden Hacks finden. Mir ist bei meinen Projekten auf der Arbeit immer öfter aufgefallen, dass die Zeit, die man durch einen schnellen Hack spart, später zehnfach investiert werden muss wenn man nochmal etwas daran ändern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995485</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Thu, 16 Feb 2006 08:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to C-Cast in C++ on Thu, 16 Feb 2006 10:02:24 GMT]]></title><description><![CDATA[<p>Ich habe nicht davon gesprochen, dass es gut ist Fehler zu wiederholen, genauso wenig wie davon, dass man irgendwelche Konzepte durch dynamic_casts aushebeln soll, noch dass es gut ist wild durch die Gegend zu casten.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Das einzige was ich gesagt habe ist, dass der static_cast kein Ersatz für den dynamic_cast ist und dass man tunlichst dort wo der Typ erst zur Laufzeit feststeht dynamic_cast verwenden sollte (und keinen C-Cast bzw. static_cast).</p>
<p>Wozu darüber diskutieren ob das von mir gewählte Beispiel bei einem guten Design auftritt oder nicht?<br />
Viele Programme haben kein gutes Design, also wird einem sowas über den Weg laufen (auch wenn das eigene Design gut ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995542</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 16 Feb 2006 10:02:24 GMT</pubDate></item></channel></rss>