<?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[cast-operator]]></title><description><![CDATA[<p>könnte jemand von euch mir bitte mal den cast-operator erklären. aber bitte in einem kleinem beispiel. kann ganz simpel sein, es geht mir nur ums verständnis.</p>
<p>vielen dank, naubi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242147/cast-operator</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 03:45:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242147.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 May 2009 07:40:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cast-operator on Sun, 31 May 2009 07:40:47 GMT]]></title><description><![CDATA[<p>könnte jemand von euch mir bitte mal den cast-operator erklären. aber bitte in einem kleinem beispiel. kann ganz simpel sein, es geht mir nur ums verständnis.</p>
<p>vielen dank, naubi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718538</guid><dc:creator><![CDATA[naubi]]></dc:creator><pubDate>Sun, 31 May 2009 07:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to cast-operator on Sun, 31 May 2009 08:00:50 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/doc/tutorial/typecasting/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/typecasting/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718540</guid><dc:creator><![CDATA[brain.exe]]></dc:creator><pubDate>Sun, 31 May 2009 08:00:50 GMT</pubDate></item><item><title><![CDATA[Reply to cast-operator on Sun, 31 May 2009 13:31:26 GMT]]></title><description><![CDATA[<p><strong>static_cast</strong></p>
<p>Der static_cast Operator wird eingesetzt um zwischen Ganzzahl-Datentypen und Gleitkomma-Datentypen zu konvertieren.</p>
<pre><code class="language-cpp">float f = 3.3;
int n = static_cast&lt;int&gt;(f);
</code></pre>
<p>In den spitzen Klammern steht der Zieltyp. Wenn man Zeiger auf Objekte einer Hierarchie umwandeln möchte, sollte man eher dynamic_cast benutzen.</p>
<p><strong>--------------------------------</strong></p>
<p><strong>const_cast</strong></p>
<p>Der const_cast Operator dient dazu, den const oder volatile Modifizierer von einem Datentyp zu entfernen.</p>
<pre><code class="language-cpp">const int c = 42;
int c = const_cast&lt;int&gt;(c);
</code></pre>
<p><strong>--------------------------------</strong></p>
<p><strong>dynamic_cast</strong></p>
<p>Korrekte Umwandlung eines Zeigers oder einer Referenz auf ein Objekt einer Basisklasse auf ein Objekt einer abgeleiteten Klasse. Dynamic_cast kann nur verwendet werden, wenn die Klasse mindestens eine virtuelle Methode besitzt. Üblicherweise wird der Destruktor virtuell gemacht.</p>
<pre><code class="language-cpp">class Base { /*...*/ };
class Derived : public Base { /*...*/ };
Base *bptr1 = new Derived;
Base *bptr2 = new Base;
Derived *dptr1 = dynamic_cast&lt;Derived*&gt;(bptr1); // i. o.
Derived *dptr2 = dynamic_cast&lt;Derived*&gt;(bptr2); // Fehler: bptr2 zeigt auf eine Instanz von Base

class Base { /*...*/ };
class Derived : public Base { /*...*/ };
Derived dobj;
Base bobj;
Base &amp;bref1 = dobj;
Base &amp;bref2 = bobj;
Derived &amp;dref1 = dynamic_cast&lt;Derived&amp;&gt;(bref1); // i. o.
Derived &amp;dref2 = dynamic_cast&lt;Derived&amp;&gt;(bref2); // Fehler: bref2 referenziert eine Instanz von Base
</code></pre>
<p>* Diese Art der Umwandlung funktioniert nur, wenn das umzuwandelnde Objekt wirklich eines des Zieltyps ist.<br />
* Für die umgekehrte Richtung passiert die Umwandlung implizit, dynamic_cast wird nicht benötigt.<br />
* Achtung: Schlägt die Umwandlung eines Zeigers fehl, gibt dynamic_cast einen Nullzeiger (0) zurück!<br />
* Achtung: Schlägt die Umwandlung einer Referenz fehl, wirft dynamic_cast die Ausnahme std::bad_cast!</p>
<p><strong>----------------------------------</strong></p>
<p><strong>reinterpret_cast</strong></p>
<p>Gefährlichster und mächtigster Cast, der selten wirklich benötigt wird.</p>
<p>Der reinterpret_cast Operator wird zum einen für die Konvertierung zwischen verschiedenen Zeigertypen und zum anderen für die Konvertierung von Ganzzahlen in Zeiger und umgekehrt eingesetzt.</p>
<p>Mit ihm können u.a. Zeiger in Datentypen (und umgekehrt) „uminterpretiert“ werden.</p>
<pre><code class="language-cpp">int i = 25;
float *fp = reinterpret_cast&lt;float*&gt;(i);
</code></pre>
<p>In diesem Beispiel zeigt fp auf eine höchstwahrscheinlich undefinierte Float-Variable an der Speicheradresse 25.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718635</guid><dc:creator><![CDATA[GoOber]]></dc:creator><pubDate>Sun, 31 May 2009 13:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to cast-operator on Sun, 31 May 2009 13:47:26 GMT]]></title><description><![CDATA[<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21071">@GoOber</a>:</strong> Einige Anmerkungen:</p>
<pre><code class="language-cpp">float f = 3.3;
int n = static_cast&lt;int&gt;(f);
</code></pre>
<p>Schlechtes Beispiel, da hierfür kein Cast nötig ist. Ich würde <code>static_cast</code> eher wie folgt benutzen:</p>
<pre><code class="language-cpp">int num = 13;
int denom = 6;
float quotient = static_cast&lt;float&gt;(num) / static_cast&lt;float&gt;(denom);
// wobei ein static_cast reichen würde.
</code></pre>
<pre><code class="language-cpp">const int c = 42;
int c = const_cast&lt;int&gt;(c);
</code></pre>
<p>Ebenfalls schlechtes Beispiel, aus gleichem Grund wie oben. <code>const_cast</code> entfernt CV-Qualifizierer von Zeigern und Referenzen. Kopien brauchen keinen Cast.</p>
<pre><code class="language-cpp">const int var = func(); // damit var kein konstanter Ausdruck ist
const_cast&lt;int&amp;&gt;(var) = 7;
</code></pre>
<p>Jedoch stellt <code>const_cast</code> in den meisten Fällen einen Designfehler dar und sollte so wenig wie möglich eingesetzt werden.</p>
<p>Auch <code>dynamic_cast</code> ist normalerweise selten notwendig, wenn man Polymorphie mittels virtueller Funktionen löst. Dann weiss jede Klasse selber, was sie zu tun hat, und man braucht keine explizite Fallunterscheidung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718645</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 31 May 2009 13:47:26 GMT</pubDate></item></channel></rss>