<?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[Typekonvertierung]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main ()
{

double var  = 3.2;
double var2 = 2.2;

int var3 = 65;

int z1;
int z2;

char z3;

z1 = static_cast&lt;int&gt;(var);
z2 = var2;        // wieso nicht gleich so konvertieren ?

z3 = static_cast&lt;long&gt;(var3); // egal ob dort &lt;double&gt;, &lt;char&gt; , &lt;float&gt; oder so
                              // steht ?
                              // wieso wird int z4; nicht zu einem char ?
                              // z3 ist immer A egal ob dort long , float , double
                              // oder int steht

cout&lt;&lt;&quot;z1: &quot;  &lt;&lt;z1 &lt;&lt; endl;
cout&lt;&lt;&quot;z2: &quot;   &lt;&lt;z2 &lt;&lt;endl;
cout&lt;&lt;&quot;z4: &quot;   &lt;&lt;z3 &lt;&lt;endl;

system(&quot;PAUSE&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/269675/typekonvertierung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 03:22:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269675.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jun 2010 13:02:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 13:02:26 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main ()
{

double var  = 3.2;
double var2 = 2.2;

int var3 = 65;

int z1;
int z2;

char z3;

z1 = static_cast&lt;int&gt;(var);
z2 = var2;        // wieso nicht gleich so konvertieren ?

z3 = static_cast&lt;long&gt;(var3); // egal ob dort &lt;double&gt;, &lt;char&gt; , &lt;float&gt; oder so
                              // steht ?
                              // wieso wird int z4; nicht zu einem char ?
                              // z3 ist immer A egal ob dort long , float , double
                              // oder int steht

cout&lt;&lt;&quot;z1: &quot;  &lt;&lt;z1 &lt;&lt; endl;
cout&lt;&lt;&quot;z2: &quot;   &lt;&lt;z2 &lt;&lt;endl;
cout&lt;&lt;&quot;z4: &quot;   &lt;&lt;z3 &lt;&lt;endl;

system(&quot;PAUSE&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1918923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918923</guid><dc:creator><![CDATA[kon__]]></dc:creator><pubDate>Tue, 29 Jun 2010 13:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 13:09:01 GMT]]></title><description><![CDATA[<p>kon__ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// asc: auf das wesentliche gekürzt.
double var  = 3.2;
double var2 = 2.2;

int z1;
int z2;

z1 = static_cast&lt;int&gt;(var);
z2 = var2;        // wieso nicht gleich so konvertieren ?
</code></pre>
</blockquote>
<p>Stell mal die höchste Warnstufe an. double lässt sich nicht verlustfrei nach int konvertieren, und es sollte daher eine Warnung kommen (die man mittels expliziten static_cast unterdrückt). Zudem hat der cast auch den Vorteil, das man explizit sieht, das hier eine Konvertierung statt findet - was manche Fehlersuche vereinfachen kann.</p>
<p>Auch deine restlichen Fragen erübrigen sich, wenn du wirklich mit höchster Warnstufe hantierst (Was man allgemein sollte, und das Ziel sollte sein dabei möglichst Warnungsfrei zu bleiben - oder falls nicht anders möglich [z.B. Fremdbibliotheken] Warnungen bewusst, und lokal abzuschalten - z.B. durch pragma-Anweisungen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918925</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jun 2010 13:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 13:18:41 GMT]]></title><description><![CDATA[<p>Wie ist das denn wenn man Daten von einem Datentyp in den nächsten kopiert so wie hier:</p>
<pre><code class="language-cpp">int var1 = 30;
int var2;

var2 = var1;                 // So ??
// var2 = static_cast&lt;int&gt;(var1);   Oder besser so ??

cout &lt;&lt; var2 &lt;&lt; endl;
</code></pre>
<p>Welche Variante ist hier besser die mit dem cast oder die mit der = Zuweisung ?</p>
<p>Oder ist das in diesem Fall egal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918933</guid><dc:creator><![CDATA[kon__]]></dc:creator><pubDate>Tue, 29 Jun 2010 13:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 13:33:59 GMT]]></title><description><![CDATA[<p>kon__ schrieb:</p>
<blockquote>
<p>Wie ist das denn wenn man Daten von einem Datentyp in den nächsten kopiert so wie hier:</p>
</blockquote>
<p>Innerhalb des gleichen Datentyps, oder von einem kleineren Datentyp in einen größeren, der diesen verlustfrei aufnehmen kann, ist niemals ein Cast erforderlich. Ein Cast wie static_cast weißt auf eine potentielle Problemstelle hin.</p>
<p>Sprich: Ein expliziter Cast sollte dann gemacht werden, wenn es zu einem Verlust kommen kann, oder spezielle Umwandlungen nötig sind (ich erwähne hier nur mal dynamic_cast, reinterpret_cast... was aber hier zu weit führt), und man sollte sich der Konsequenzen bewusst sein. Allgemein ist ein C++ Cast aber weniger anfällig als ein C-Cast (dies nur am Rande, sprich ein static_cast&lt;int&gt;(a) ist einem (int)a im Zweifel vorzuziehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918944</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jun 2010 13:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 14:16:31 GMT]]></title><description><![CDATA[<p>Diesen Satz verstehe ich nicht ganz:</p>
<p>Ein expliziter Cast sollte dann gemacht werden, wenn es zu einem Verlust kommen kann,</p>
<p>Was ist hier mit einem Verlust gemeint ?<br />
Hast du vielleicht ein beispiel dafür ?</p>
<pre><code class="language-cpp">int var = 123456;
short var_2;

var_2 = var;  // Jetzt hätte man doch ein &quot;Verlust&quot; oder wie ist das gemeint ?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1918967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918967</guid><dc:creator><![CDATA[kon__]]></dc:creator><pubDate>Tue, 29 Jun 2010 14:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 14:23:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main ()
{

short var1 = 10;
short var2 = 4;
double result1, result2;

result1 = var1 / var2;
cout &lt;&lt; result1&lt;&lt;endl; // result1 = 2  Verlust von 0.5

result1 = static_cast&lt;double&gt;(var1) / static_cast&lt;double&gt;(var2);
cout &lt;&lt; result1&lt;&lt;endl;  // result1 = 2.5  Kein Verlust

result1 = (double)var1 / (double)var2; // C-Style Typekonvertierung

cout &lt;&lt; result1&lt;&lt;endl;  // result1 = 2.5  Kein Verlust ( Kann aber ehr zum Verlust führen als
                       // bei static_cast ?

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1918970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918970</guid><dc:creator><![CDATA[kon__]]></dc:creator><pubDate>Tue, 29 Jun 2010 14:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 17:18:41 GMT]]></title><description><![CDATA[<p>Kann mir den keiner sagen ob ich das mit dem Verlust jetzt so richtig interpretiere oder nicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919019</guid><dc:creator><![CDATA[kon__]]></dc:creator><pubDate>Tue, 29 Jun 2010 17:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 17:39:15 GMT]]></title><description><![CDATA[<p>kon__ schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Gleich noch ein paar mehr Anmerkungen:<br />
1. Einrücken des Codes würde es einen Leser erleichtern. Ebenso solltest du Leerzeichen, etc. etwas einheitlicher setzen (z.B. mal lässt du einen Leerzeichen zwischen den operator&lt;&lt; und mal nicht).<br />
2. In C++ ist es üblich Variablen erst bei, oder direkt vor, der ersten Verwendung zu benutzen.</p>
<p>Im ersten Fall, tritt der Verlust nicht durch die Zuweisung ein, sondern durch das Teilen (Erst werden zwei short geteilt, und danach das Ergebnis zugewiesen).</p>
<p>Im zweiten Fall würde es theoretisch reichen, wenn du eine Seite umwandelst (da der Compiler die Typen für die Berechnung anpasst).</p>
<p>Der Kommentar zum dritten stimmt nicht 100%ig. In diesen Fall ist der C-Style Cast unproblematisch. Der C-Style Cast macht aber deutlich mehr Umwandlungen mit, als der static_cast, und nicht alle sind vielleicht so gewünscht (Und schwer im Programmcode zu finden). In C++ gibt es aus diesen Gründen mehrere verschiedene Cast-Funktionen, die unterschiedliches ausdrücken. Mit den C-Style Cast kannst du im Wesentlichen Elefanten in Fliegen verwandeln, ohne eine Warnung zu erhalten, ob du das wünschst, sei dahin gestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919033</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jun 2010 17:39:15 GMT</pubDate></item><item><title><![CDATA[Reply to Typekonvertierung on Tue, 29 Jun 2010 17:50:37 GMT]]></title><description><![CDATA[<p>Nein, in dieser Hinsicht sind <code>static_cast</code> und der C-Cast äquivalent. Mit dem C-Cast kannst du aber (oft aus Versehen) sehr schräge Dinge casten, und dann hast du teilweise undefiniertes Verhalten. Darum würde ich eher zu den C++-Konvertierungsoperatoren raten, da ihre Funktionalität schön aufgetrennt ist und man sie gut im Code sieht.</p>
<pre><code class="language-cpp">void Function(double* a, double* b)
{
    int c = (int)a / (int)b; // Oh nein, sollte (int)*a / (int)*b heissen!
    // Hab ich nämlich nach dem Refactoring von Referenzen auf Zeiger vergessen
    // Aber es kompiliert ohne Probleme

    int c = static_cast&lt;int&gt;(a) / static_cast&lt;int&gt;(b);
    // Das wäre hier nicht passiert
}

void Function2(const BaseClass&amp; b)
{
    // Da ich weiss, dass es sich um eine Derived handelt, kann ich downcasten
    Function3( (DerivedClass&amp;)b ); // Oh nein, const weggecastet!
    // Aber es kompiliert ohne Probleme

    Function3( static_cast&lt;DerivedClass&amp;&gt;(b) );
    // Das wäre hier nicht passiert
}

void Function2(const BaseClass&amp; b)
// ein Monat später sind BaseClass und DerivedClass nicht mehr in einer Hierarchie
{
    Function3( (const DerivedClass&amp;)b ); // Ha, const diesmal richtig!
    // Oh nein, dafür aus Versehen zwei inkompatible Typen gleichgebogen
    // Aber es kompiliert ohne Probleme

    Function3( static_cast&lt;DerivedClass&amp;&gt;(b) );
    // Das wäre hier nicht passiert
}
</code></pre>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1919041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919041</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 29 Jun 2010 17:50:37 GMT</pubDate></item></channel></rss>