<?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[Konvertierung vs. Cast]]></title><description><![CDATA[<p>Abend,<br />
hab 2 kleine Fragen:</p>
<p>Ist ein Cast nach unsigned immer wohl definiert? Bsp:</p>
<pre><code class="language-cpp">unsigned char uc = -99; // OK?
uc = 555; // OK?
</code></pre>
<p>Ist ein Cast nach signed nur dann definiert, wenn der Wert im Zieltyp darstellbar ist, ansonsten UB? Bsp:</p>
<pre><code class="language-cpp">signed char sc = -99; // OK?
sc = 555; // UB?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/294535/konvertierung-vs-cast</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:47:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294535.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Oct 2011 18:32:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konvertierung vs. Cast on Fri, 28 Oct 2011 17:07:07 GMT]]></title><description><![CDATA[<p>Abend,<br />
hab 2 kleine Fragen:</p>
<p>Ist ein Cast nach unsigned immer wohl definiert? Bsp:</p>
<pre><code class="language-cpp">unsigned char uc = -99; // OK?
uc = 555; // OK?
</code></pre>
<p>Ist ein Cast nach signed nur dann definiert, wenn der Wert im Zieltyp darstellbar ist, ansonsten UB? Bsp:</p>
<pre><code class="language-cpp">signed char sc = -99; // OK?
sc = 555; // UB?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2136315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136315</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Oct 2011 17:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Wed, 26 Oct 2011 18:33:43 GMT]]></title><description><![CDATA[<p>ich denke es sollte definiert sein. es kommt halt ein overflow zustande...</p>
<p>sprich -99 nach unsigned wird auf einmal eine ziemlich grosse zahl und umgekehrt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136317</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 26 Oct 2011 18:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Wed, 26 Oct 2011 18:37:33 GMT]]></title><description><![CDATA[<p>Der Standard schreibt nicht vor, welche Darstellung für negative Zahlen verwendet wird, daher müsste das UB sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136318</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 26 Oct 2011 18:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Wed, 26 Oct 2011 19:00:07 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Abend,<br />
hab 2 kleine Fragen:</p>
<p>Ist ein Cast nach unsigned immer wohl definiert? Bsp:</p>
<pre><code class="language-cpp">unsigned char uc = -99; // OK?
uc = 555; // OK?
</code></pre>
</blockquote>
<p>Es handelt sich nicht um Casts. Das Ergebnis ist immer wohldefiniert (4.7/2), sofern der Ausgangsausdruck einen integralen oder (unscoped - we übersetzt man das?) Aufzählungstypen hat. Hat der Ausgangsausdruck einen Gleitkommatypen wird es undefiniert, sobald der abgeschnittene Ausgangswert nicht mehr im Zieltypen darstellbar ist (4.8/1).</p>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Ist ein Cast nach signed nur dann definiert, wenn der Wert im Zieltyp darstellbar ist, ansonsten UB? Bsp:</p>
<pre><code class="language-cpp">signed char sc = -99; // OK?
sc = 555; // UB?
</code></pre>
</blockquote>
<p>Auch diese Konvertierung ist, wenn der Ausgangstyp ein integraler bzw. (unscoped) Aufzählungstyp ist, immer definiert (4.7/3). Allerdings ist das konkrete Ergebnis implementation-defined, falls der Ausgangswert nicht exakt im Zieltypen darstellbar ist. Für Gleitkommawerte gilt das Gleiche wie oben.</p>
<p>Das ist im Übrigen - was man vermutlich leicht verwechseln kann - eine andere Frage als die, was passiert, wenn der Wert einer Berechnung den Wertebereich des jeweiligen Typen, mit dem die Berechnung ausgeführt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136334</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Oct 2011 19:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Thu, 27 Oct 2011 16:39:53 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Es handelt sich nicht um Casts.</p>
</blockquote>
<p>Wann spricht man den von einem Cast. Kann einer ein Beispiel machen. <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>camper schrieb:</p>
<blockquote>
<p>Allerdings ist das konkrete Ergebnis implementation-defined, falls der Ausgangswert nicht exakt im Zieltypen darstellbar ist.</p>
</blockquote>
<p>Dass nennt man dann ja UB, oder bin ich nun aufm falschen Dampfer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136753</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Oct 2011 16:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Thu, 27 Oct 2011 17:50:08 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Es handelt sich nicht um Casts.</p>
</blockquote>
<p>Wann spricht man den von einem Cast. Kann einer ein Beispiel machen. <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>
</blockquote>
<p>Beispiele für casts:</p>
<pre><code class="language-cpp">/* ... */

class B; 
class D : public B {};

void f(const int&amp; ci)
{
int i;
long l;
int* pi;
char ca[sizeof(int)];

i = static_cast&lt;int&gt;(l);
i = (int)l; //C-Style cast
i = int(l); //function style cast;

pi = const_cast&lt;int*&gt;(&amp;ci);
pi = (int*)(&amp;ci); //C-Style cast

pi = reinterpret_cast&lt;int*&gt;(ca);
pi = (int*)(ca); //C-Style cast

B* pb;
D* pd;

pd = dynamic_cast&lt;D*&gt;(pb);
pd = (D*)pb; //Tut nicht das gleiche!!
</code></pre>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Allerdings ist das konkrete Ergebnis implementation-defined, falls der Ausgangswert nicht exakt im Zieltypen darstellbar ist.</p>
</blockquote>
<p>Dass nennt man dann ja UB, oder bin ich nun aufm falschen Dampfer?</p>
</blockquote>
<p>Implementation defined != undefined.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136798</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 Oct 2011 17:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Thu, 27 Oct 2011 18:07:50 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class B; 
class D : public B {};

void f(const int&amp; ci)
{
int i;
long l;
int* pi;
char ca[sizeof(int)];

i = static_cast&lt;int&gt;(l);
i = (int)l; //C-Style cast
i = int(l); //function style cast;

pi = const_cast&lt;int*&gt;(&amp;ci);
pi = (int*)(&amp;ci); //C-Style cast

pi = reinterpret_cast&lt;int*&gt;(ca);
pi = (int*)(ca); //C-Style cast

B* pb;
D* pd;

pd = dynamic_cast&lt;D*&gt;(pb);
pd = (D*)pb; //Tut nicht das gleiche!!
</code></pre>
</blockquote>
<p>Ok, also es sieht für mich nun so aus, als spräche man von einem Cast, wenn ein C++ Cast-Operator, ein C-Style cast oder ein function-style-cast zum Einsatz kommt? Aber ich hab noch immer nicht verstaden wo der Unterschied zwischen Cast und Konvertierung liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136811</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Oct 2011 18:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Tue, 06 Dec 2011 20:37:00 GMT]]></title><description><![CDATA[<p>Ich habe noch ein bisschen recherchiert und möchste nun noch eine Zusammenfassung posten, um anderen Anfängern zu helfen. Falls Missverständnisse oder Fehler enhalten sind, möge mich bitte jemand korrigieren.</p>
<p><strong>Automatische (implizite) Typ-Konvertierung</strong><br />
Findet immer dann statt, wenn der Compiler ein Datum eines bestimmten Typs erwartet, jedoch ein Datum eines anderen Typs gegeben ist, sodass der Compiler nun eine implizite Typ-Konvertierung durchführt. Es gibt 2 Arten von impliziter Typ-Konvertierung bei numerischen Typen:</p>
<p>1. numeric promotion:</p>
<ul>
<li>Integral-Value: bool, char, signed char, unsigned char, short, unsigned short ----&gt; promoted to int oder unsigned int, falls int den Wert nicht darstellen kann.</li>
<li>Fließkomma-Value: float-value ----&gt; promoted to double-value.</li>
</ul>
<p>2. numeric conversion: Nachdem numeric promotion gemacht wurde, kann das Datum in einen anderen nummerischen Typ konvertiert werden.</p>
<ul>
<li>Ein Datum eines integralen Typs (und auch ein Enumerator) kann zu jedem anderen integralen Typ konvertiert werden. Bei der Konvertierung zu einem signed-integral kann es zu einem Überlauf kommen. Das Ergebnis ist dann implementation-defined.</li>
<li>Ein Datum eines fließkomma Typs kann zum anderen fließkomma Typ konvertiert werden. Falls das zu konvertierende Datum im anderen fließkomma Typ exakt dargestellt werden kann, findet eine exakte Konvertierung statt. Ansonsten, wenn zwei Daten möglich sind und das ursprüngliche Datum zwischen den beiden liegt, wird irgendeins von beiden genommen. Alles andere ist implementation-defined.</li>
<li>Ein Datum eines integralen Typs kann zu einem fließkomma Typ konvertiert werden. Falls möglich ist das Ergebnis exakt, ansonsten wird der nächst höhere oder nächst kleinere darstellbare Wert genommen (implementation-defined).</li>
<li>Ein Datum eines fließkomma Typs kann zu einem integralen Typ konvertiert werden, wobei die Nachkommastellen verworfen werden.</li>
</ul>
<p><strong>Explizite Typ-Konvertierung (Cast)</strong><br />
Es gibt Fälle, bei denen eine implizite Typ-Konvertierung schlicht nicht durchführbar ist oder der Compiler sich nicht sicher ist, zu welchem Typ er konvertieren soll. Diese Fälle benötigen eine explizite Anweisung vom Programmierer an den Compiler, ansonsten Compilerfehler. In C++ wurden 4 Cast-Operatoren eingeführt, die eine anschauliche Syntax mit Aussagekraft und <a href="http://www.c-plusplus.net/forum/p1815626?highlight=typsicherheit+dynamiccast#1815626" rel="nofollow">Typsicherheit</a> bieten. Der Compiler versucht den Ausdruck dann so zu interpretieren, als wäre er von dem angegebenen Typ; falls ihm dies nicht gelingt, gibt es einen Compilerfehler.</p>
<pre><code class="language-cpp">static_cast&lt;typ&gt;(ausdruck);     // Eigentlich ist nur der static_cast sinnvoll.

dynamic_cast&lt;typ&gt;(ausdruck);    // Weist auf Designfehler hin, d.h. ein schlechtes Design ist der Grund, dass man dynamic_cast braucht.

const_cast&lt;typ&gt;(ausdruck);      // const_cast zur Umgehung von Compilerfehlern einzusetzen kann ja nur gefährlich sein. Man soll sich also
                                // im Vorfeld überlegen, ob man nun const will oder nicht, und die Deklaration dann gleich richtig machen.

reinterpret_cast&lt;typ&gt;(ausdruck);// Sehr gefährlich. Wenn man nicht exakt weiß was man tut, landet man schnell bei undefined behaviour.
</code></pre>
<p><strong>Hinweis</strong><br />
Wenn hustbaer nichts dagegen hat, darf ich ihn einmal zitieren:</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Klar gibt es casting Operatoren, aber die kann man nicht überladen und auch nicht definieren, die sind einfach eingebaut.<br />
Das was man definieren kann nennt sich &quot;<a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">conversion operator</a>&quot;.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2137227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137227</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 06 Dec 2011 20:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Fri, 28 Oct 2011 18:09:26 GMT]]></title><description><![CDATA[<p>Du hast noch weitere implizite Konvertierungen vergessen, nämlich implizite Konvertierung durch nutzerdefinierte, nicht mit explicit gekennzeichnete Konvertierungsoperatoren bzw. -konstruktoren, Konvertierung von Pointern nach bool, von T* nach void*, von 0 nach T*, von derived* nach base* usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137250</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 28 Oct 2011 18:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Fri, 28 Oct 2011 18:37:25 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Du hast noch weitere implizite Konvertierungen vergessen, nämlich implizite Konvertierung durch nutzerdefinierte, nicht mit explicit gekennzeichnete Konvertierungsoperatoren bzw. -konstruktoren, Konvertierung von Pointern nach bool, von T* nach void*, von 0 nach T*, von derived* nach base* usw.</p>
</blockquote>
<p>Ich weiß <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="😃"
    /> Aber mir ging es nur darum, zu verstehn warum die Aussagen &quot;manueller Cast&quot; und &quot;automatischer Cast&quot; falsch sind. Ich glaube ich bin nicht der einzige, der diese benutzt hat. Ich frage mich gerade, wieso das so ist. Weiß da einer eine Antwort?</p>
<p>In den Skripts von meinem Prof. ist auch immer die Rede von automatischen und manuellen Casts und die unterrichten immer ein c c++ gemisch. Langsam glaub ich die haben alle solche Bücher wie &quot;C++ von A bis Z&quot;. Bitter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137265</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Oct 2011 18:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Fri, 28 Oct 2011 18:49:47 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Ich weiß <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="😃"
    /> Aber mir ging es nur darum, zu verstehn warum die Aussagen &quot;manueller Cast&quot; und &quot;automatischer Cast&quot; falsch sind. Ich glaube ich bin nicht der einzige, der diese benutzt hat. Ich frage mich gerade, wieso das so ist. Weiß da einer eine Antwort?</p>
</blockquote>
<p>Cast ist eben ein Synonym für <strong>explizite</strong> Typkonvertierung. Entweder eines der vier C++-Operatorschlüsselwörter, oder C-Casts oder Function-Style-Casts wie z.B. <code>short(3)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137271</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 28 Oct 2011 18:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Fri, 28 Oct 2011 18:52:05 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Ich weiß <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="😃"
    /> Aber mir ging es nur darum, zu verstehn warum die Aussagen &quot;manueller Cast&quot; und &quot;automatischer Cast&quot; falsch sind. Ich glaube ich bin nicht der einzige, der diese benutzt hat. Ich frage mich gerade, wieso das so ist. Weiß da einer eine Antwort?</p>
</blockquote>
<p>Cast ist eben ein Synonym für <strong>explizite</strong> Typkonvertierung. Entweder eines der vier C++-Operatorschlüsselwörter, oder C-Casts oder Function-Style-Casts wie z.B. <code>short(3)</code> .</p>
</blockquote>
<p>Jup schon, aber ich höre immer noch oft impliziter Cast.</p>
<p>Wie ist den eure Erfahrung so mit C++ Dozenten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137274</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Oct 2011 18:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung vs. Cast on Sat, 29 Oct 2011 11:25:31 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Wie ist den eure Erfahrung so mit C++ Dozenten?</p>
</blockquote>
<p>Habe ich nicht. Meine Dozenten bestanden aus Papier oder PDFs &amp; Co., und offenbar hatte ich das Glück gleich an die Richtigen geraten zu sein - Herb Sutter, Scott Meyers, Andrei Alexandrescu &amp; Co.</p>
<p>Zum Thema Cast und Konvertierung: Nach ein wenig umherschauen im Netz meine ich, die allgemeine Verwendung von &quot;cast&quot; und &quot;conversion&quot; in etwa so verstanden zu haben: &quot;Cast&quot; wird benutzt, wenn ein Ausdruck eines Typs an einer Stelle benutzt wird, an der ein Ausdruck eines anderen Typs benötigt wird. Ein Cast ist daher immer explizit und benötigt eine Umwandlung (conversion), die entweder explizit (cast-Operatoren, C-Cast, function-style-cast) oder implizit (diverse Möglichkeiten...) vonstatten gehen kann. Ein Cast ist das, was syntaktisch im Quellcode passiert, eine Conversion ist im Grunde das, was der Compiler macht, eben entweder automatisch/implizit, oder indem ´man ihn dazu anweist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137398</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 29 Oct 2011 11:25:31 GMT</pubDate></item></channel></rss>