<?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[int statt unsigned short - Wieso?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ja noch ein Newbe und folglich lese ich sehr viel um C++ ordentlich zu lernen. Unter anderem ist mir das Buch &quot;Bjarne Stroustrup: Die C++ Programmiersprache (Deutsche Übersetzung der Special Edition). Addison-Wesley 2000, ISBN 382731660X&quot; empfohlen worden, welches ich gerade durcharbeite. Abenso schaue ich antürlich viele Tuts an um viel zu lernen und teste viel.</p>
<p>Eine Sach fällt mir immer mehr auf, die zwar so sein mag, mir sich aber der Grund nicht ganz erschließt.</p>
<pre><code class="language-cpp">bool f(int i)
{
  if ((i&lt;0) || (i&gt;10)) return false;
  return true;
}
</code></pre>
<p>Wieso soll ich ein int benutzen, wenn ein unsigned short doch hier wohl die bessere Wahl wäre? Auch Bjarne schreibt in seinen Ratschlägen &quot;Bevorzuge ein int anstatt einen bz. unsigned short oder long&quot; (kein Zitat, sondern Sinngemäß, weil Buch gerade nicht zur Hand).</p>
<p>Kann mir das jemand erklären. Ein unsigned short ist doch eindeutig, dass die Zahl nicht kleiner 0 sein kann, also macht es doch mehr Sinn erst keine negativen Zahlen zuzulassen. Und short ist sicherlich immer im Bereich bis 10, selbst auf den kleinsten Bit-Systemen. Was ist also am int so toll, dass man nicht seine Verwandten nehmen soll, besonders bei einem so einfachen Beispiel wie oben?</p>
<p>Bitte um Aufklärung,<br />
Danke,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245432/int-statt-unsigned-short-wieso</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 20:13:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245432.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jul 2009 08:41:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 08:41:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ja noch ein Newbe und folglich lese ich sehr viel um C++ ordentlich zu lernen. Unter anderem ist mir das Buch &quot;Bjarne Stroustrup: Die C++ Programmiersprache (Deutsche Übersetzung der Special Edition). Addison-Wesley 2000, ISBN 382731660X&quot; empfohlen worden, welches ich gerade durcharbeite. Abenso schaue ich antürlich viele Tuts an um viel zu lernen und teste viel.</p>
<p>Eine Sach fällt mir immer mehr auf, die zwar so sein mag, mir sich aber der Grund nicht ganz erschließt.</p>
<pre><code class="language-cpp">bool f(int i)
{
  if ((i&lt;0) || (i&gt;10)) return false;
  return true;
}
</code></pre>
<p>Wieso soll ich ein int benutzen, wenn ein unsigned short doch hier wohl die bessere Wahl wäre? Auch Bjarne schreibt in seinen Ratschlägen &quot;Bevorzuge ein int anstatt einen bz. unsigned short oder long&quot; (kein Zitat, sondern Sinngemäß, weil Buch gerade nicht zur Hand).</p>
<p>Kann mir das jemand erklären. Ein unsigned short ist doch eindeutig, dass die Zahl nicht kleiner 0 sein kann, also macht es doch mehr Sinn erst keine negativen Zahlen zuzulassen. Und short ist sicherlich immer im Bereich bis 10, selbst auf den kleinsten Bit-Systemen. Was ist also am int so toll, dass man nicht seine Verwandten nehmen soll, besonders bei einem so einfachen Beispiel wie oben?</p>
<p>Bitte um Aufklärung,<br />
Danke,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742549</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 14 Jul 2009 08:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:22:03 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Eine Sach fällt mir immer mehr auf, die zwar so sein mag, mir sich aber der Grund nicht ganz erschließt...</p>
<p>Wieso soll ich ein int benutzen, wenn ein unsigned short doch hier wohl die bessere Wahl wäre? Auch Bjarne schreibt in seinen Ratschlägen &quot;Bevorzuge ein int anstatt einen bz. unsigned short oder long&quot; (kein Zitat, sondern Sinngemäß, weil Buch gerade nicht zur Hand).</p>
</blockquote>
<p>int entspricht in der Regel dem Typ, mit dem der Rechner arbeitet (z.b. häufig 32 Bit auf ein 32 Bit-System und 64 bit auf einem 64-Bit System). Dies kann (muss aber nicht) gewisse Performancevorteile etc. mit sich bringen.</p>
<p>Ich bin aber auch eher der Fan davon die Typen zu verwenden die ich für den Fall am sinnvollsten halte.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742573</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:26:26 GMT]]></title><description><![CDATA[<p>Ein USHORT (unsigned short) hat in dem oben genanten Beispiel natürlich bessere Verwendung, ein char (mit Umwandlung, sodass er nicht als Buchstabe angesehen wird) noch mehr, aber ich vermute, dass die Aussage des Autors ein Allgeimplätzchen ist, das du dann verwenden solltest, wenn du nicht sicher bist. Typenwirrköpfe hat es schon immer gegeben, auch bei Microsoft.</p>
<p>Aus der MFC (oder so ähnlich):</p>
<pre><code class="language-cpp">#define TRUE 1
#define FALSE 0

typedef int BOOL; // Vier Byte für einen Wahrheitswert!
</code></pre>
<p>Wie du siehst, definiert Microsoft in eigenen Klassenbibliotheken einen eigenen boolischen Typen, der vier statt 1 Byte Speicher verbraucht. Selbst wenn man bedenkt, dass es in C (nicht C++) keinen Typ bool gibt und Microsoft auch C-Programmierer unterstützen wollte, muss man sich fragen, warum sie kein BYTE (unsigned char, 1 Byte) genommen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742577</guid><dc:creator><![CDATA[Der aus dem Westen...]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:30:04 GMT]]></title><description><![CDATA[<p>Manchmal nimmt man sie für qualifizierte Fehlermeldungen.</p>
<pre><code class="language-cpp">bool f(int i)
{
  if (i&lt;0)
     throw LogigError(&quot;Du bist ein Weihnachtsmann!&quot;);
  if (i&gt;10)) 
     throw LogigError(&quot;Du bist ein Osterhase!&quot;);
  return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1742581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742581</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:30:12 GMT]]></title><description><![CDATA[<p>Der aus dem Westen... schrieb:</p>
<blockquote>
<p>ein char (mit Umwandlung, sodass er nicht als Buchstabe angesehen wird) noch mehr,</p>
</blockquote>
<p>Ein char brauchst du auch nicht umwandeln, das ist ja schon ein numerischer Typ. Und selbst wenn, in was würdest du ihn denn dann konvertieren? In ein int? <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/1742582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742582</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:33:37 GMT]]></title><description><![CDATA[<p>Kann es evtl. auch daran liegen, dass der Compiler von Haus aus bei Zahlen von einem int ausgeht?</p>
<pre><code>main
{
  f(5); // 5 ist int?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1742586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742586</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:42:55 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Kann es evtl. auch daran liegen, dass der Compiler von Haus aus bei Zahlen von einem int ausgeht?</p>
</blockquote>
<p>Das gilt, solange du die Zahlen nicht speziell angibst (5ul bedeutet z.B. eine 5 [unsigned long]).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742599</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 09:49:03 GMT]]></title><description><![CDATA[<p>Mein Compiler hat sowieso einen an der Waffel. Entweder macht er nicht das, was ich will, oder er macht alles doppelt und dreifach. Sobald ich aber die MFC einbinde, läuft er sogar ganz gut. Komisch, nicht...</p>
<p>Ja, es gibt nämlich Standartkonvertierungen.</p>
<pre><code class="language-cpp">IrgendeineFunktion(&quot;Irgendein String&quot;);        // Typ ist char*
IrgendeineFunktion((BYTE*)&quot;Irgendein String&quot;); // Typ ist BYTE*
IrgendeineFunktion(L&quot;Irgendein String&quot;);       // Type ist wchar_t*

IrgendeineFunktion(1);           // Typ ist int
IrgendeineFunktion((unsigned)1); // Typ ist unsigned int
IrgendeineFunktion((USHORT)1);   // Typ ist USHORT
</code></pre>
<p>Nur wenn man dem Compiler ganz genau sagt, wie er den Wert behandeln soll, gibt es keine Konvertierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742603</guid><dc:creator><![CDATA[Der aus dem Westen...]]></dc:creator><pubDate>Tue, 14 Jul 2009 09:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 10:02:36 GMT]]></title><description><![CDATA[<p>Der aus dem Westen... schrieb:</p>
<blockquote>
<p>Ja, es gibt nämlich Standartkonvertierungen.</p>
<p>...</p>
<p>Nur wenn man dem Compiler ganz genau sagt, wie er den Wert behandeln soll, gibt es keine Konvertierung.</p>
</blockquote>
<p>Doch, genau das machst du hier: Konvertieren (Teilweise unnötig, und zudem solltes du lieber wenn du konvertierst auf die C++ Casts zurückgreifen - sind sicherer). Wenn du Zahlen von haus aus richtig angibst (wie in meinen Beispiel 5ul für eine 5 [unsigned long]) gibt es keine Konvertierung zur Laufzeit mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742612</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 10:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 10:05:54 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Doch, genau das machst du hier: Konvertieren (Teilweise unnötig, und zudem solltes du lieber wenn du konvertierst auf die C++ Casts zurückgreifen - sind sicherer).</p>
</blockquote>
<p>Bockmist!<br />
foo(static_cast&lt;char&gt;(5)); ist nicht sicherer als foo(char(5)); oder foo((char)5);</p>
<p>asc schrieb:</p>
<blockquote>
<p>Wenn du Zahlen von haus aus richtig angibst (wie in meinen Beispiel 5ul für eine 5 [unsigned long]) gibt es keine Konvertierung zur Laufzeit mehr.</p>
</blockquote>
<p>Genau so klug wie die erste These.<br />
foo((unsigned long)5); erzeugt keine Konvertierung zur Laufzeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742615</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jul 2009 10:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 10:09:51 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Bockmist!<br />
foo(static_cast&lt;char&gt;(5)); ist nicht sicherer als foo(char(5)); oder foo((char)5);</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742619</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 14 Jul 2009 10:09:51 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 10:51:38 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Doch, genau das machst du hier: Konvertieren (Teilweise unnötig, und zudem solltes du lieber wenn du konvertierst auf die C++ Casts zurückgreifen - sind sicherer).</p>
</blockquote>
<p>Bockmist!<br />
foo(static_cast&lt;char&gt;(5)); ist nicht sicherer als foo(char(5)); oder foo((char)5);</p>
</blockquote>
<p>Aber dies:<br />
IrgendeineFunktion((BYTE*)&quot;Irgendein String&quot;);<br />
empfinde ich als Sicherheitsrisiko - wenn man sich nicht darauf verlässt das BYTE* gleich char* ist. Da sehe ich lieber wenn eine reinterpretierung statt findet.</p>
<pre><code class="language-cpp">IrgendeineFunktion(reinterpret_cast&lt;BYTE*&gt;(&quot;Irgendein String&quot;));
</code></pre>
<p>volkard schrieb:</p>
<blockquote>
<p>Genau so klug wie die erste These.<br />
foo((unsigned long)5); erzeugt keine Konvertierung zur Laufzeit.</p>
</blockquote>
<p>Gut, wusste noch nicht das die C-Casts standardmäßig vom Compiler rausoptimiert werden. Weil die 5 hier erst einmal ein int-Wert ist, eine 5ul wäre ein unsigned long.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742648</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 10:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 10:57:44 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Aber dies:<br />
IrgendeineFunktion((BYTE*)&quot;Irgendein String&quot;);<br />
empfinde ich als Sicherheitsrisiko - wenn man sich nicht darauf verlässt das BYTE* gleich char* ist. Da sehe ich lieber wenn eine reinterpretierung statt findet.</p>
</blockquote>
<p>Ich auch.<br />
Aber wenn man dogmatisch alles mit &lt;&gt;-casts macht, wie Du es vorschlägst, schwächst Du die erwünsche Signalwirkung des <code>reinterpret_cast</code> doch nur ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742652</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jul 2009 10:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:02:13 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Bockmist!<br />
foo(static_cast&lt;char&gt;(5)); ist nicht sicherer als foo(char(5)); oder foo((char)5);</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Auch: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742658</guid><dc:creator><![CDATA[general bacardi]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:18:22 GMT]]></title><description><![CDATA[<p>Zurück zum Thema:</p>
<pre><code class="language-cpp">void book(int page) // oder unsigned short?
{
  switch (page)
  {
  case 1: cout &lt;&lt; .... break;
  case 2: cout &lt;&lt; .... break;
  case 3: cout &lt;&lt; .... break;
  default: cout &lt;&lt; &quot;Seite nicht vorhanden\n&quot;;
  }
}

int main()
{
  book(1);
  book(3);
}
</code></pre>
<p>Was macht jetzt mehr Sinn? int oder unsigned short. Wenn ich euch richtig verstanden habe, dann eigentlich unsigned short, weil ich mir sicher bin, dass es ja keine negativen Zahlen geben wird und der Wertebereich sicherlich abgedeckt ist. Könnte ich diese Dinge nicht sicher stellen, dann int. Richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742670</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:21:46 GMT]]></title><description><![CDATA[<p>Nimm int. damit ist alles am einfachsten. Unsigned nur, wenn negtive Zahlen stören würden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742674</guid><dc:creator><![CDATA[general bacardi]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:38:26 GMT]]></title><description><![CDATA[<p>Du vergisst aber asc's Post:</p>
<p>asc schrieb:</p>
<blockquote>
<p>int entspricht in der Regel dem Typ, mit dem der Rechner arbeitet (z.b. häufig 32 Bit auf ein 32 Bit-System und 64 bit auf einem 64-Bit System). Dies kann (muss aber nicht) gewisse Performancevorteile etc. mit sich bringen.</p>
</blockquote>
<p>Kann natürlich nur irgendwie merkliche Vorteile bringen, wenn man sich in rechenintensiven Routinen befindet (wenn überhaupt). Im Beispiel isses sowieso Pott wie Deckel. Es sei denn, du willst unbedingt die 2 Bytes sparen. Und Signed oder Unsigned ist im Beispiel doch auch egal. Im Speicher ist es dasselbe. Solange du nicht &lt;&gt;-Vergleiche machst oder so, macht's doch keinen Unterschied. Es kann aber quasi zur &quot;Dokumentation&quot; im Code beitragen. Wenn eine Funktion ein unsigned int verlangt, kommst du gar nicht erst auf die Idee, was Negatives zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742690</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:47:36 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Aber wenn man dogmatisch alles mit &lt;&gt;-casts macht, wie Du es vorschlägst, schwächst Du die erwünsche Signalwirkung des <code>reinterpret_cast</code> doch nur ab.</p>
</blockquote>
<p>Das &quot;Aber wenn man dogmatisch alles mit &lt;&gt;-casts macht, wie Du es vorschlägst&quot; habe ich niemals gesagt, sondern nur das ich statt C-Casts immer die C++ Pendants verwenden würde (Da ich danach auch suchen kann, bei C-Casts ist dies nicht eindeutig möglich).</p>
<p>Ich würde an den meisten Stellen keinen Cast verwenden, wenn ich dies durch eine explizite Typangabe eh umgehen kann. Ich verwende statt &quot;static_cast&lt;unsigned long&gt;(5)&quot;, &quot;(unsigned long)5&quot; oder &quot;unsigned long(5)&quot; einfach gleich die typisierte 5 (&quot;5ul&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742700</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 11:57:21 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>oder &quot;unsigned long(5)&quot;</p>
</blockquote>
<p>Das geht ja genausowenig wie <code>int*(0)</code> für einen Nullzeiger auf int. <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="😉"
    /><br />
Es muss schon ein Wort sein. Sonst benutz ich aber auch mal gern die Funktions-Syntax für's statische Casting.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742708</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 14 Jul 2009 11:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:01:56 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Das &quot;Aber wenn man dogmatisch alles mit &lt;&gt;-casts macht, wie Du es vorschlägst&quot; habe ich niemals gesagt, sondern nur das ich statt C-Casts immer die C++ Pendants verwenden würde (Da ich danach auch suchen kann, bei C-Casts ist dies nicht eindeutig möglich).</p>
</blockquote>
<p>Du nimmst möglichst immer die &lt;&gt;-casts. Aus prinzipiellen Gründen. Unabhängig vom Umfeld. Das ist doch Dogmatismus pur. Daß Du das innerhalb eines Satzes abstreitest und dann doch belegst, beleidigt meine Intelligenz.[/quote]</p>
<blockquote>
<p>Ich würde an den meisten Stellen keinen Cast verwenden, wenn ich dies durch eine explizite Typangabe eh umgehen kann. Ich verwende statt &quot;static_cast&lt;unsigned long&gt;(5)&quot;, &quot;(unsigned long)5&quot; oder &quot;unsigned long(5)&quot; einfach gleich die typisierte 5 (&quot;5ul&quot;).</p>
</blockquote>
<p>Ich sehe, daß Du noch nicht auf die einschlägigen Probleme damit gestoßen bist. Ich leuchte mal voraus:</p>
<pre><code class="language-cpp">bool isprime(u16 n);//lookup and wheel
bool isprime(u32 n);//additional SPRP
bool isprime(u64 n);//more SPRP, result truth depending on riemann hypothesis
...
cout&lt;&lt;isprime(u16(100));
</code></pre>
<p>Welche typsuffixe nimmt man eigentlich für einen 16-bittigen unsigned int? welchen suffix für size_t?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742711</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:01:56 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:09:14 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Doch, genau das machst du hier: Konvertieren (Teilweise unnötig, und zudem solltes du lieber wenn du konvertierst auf die C++ Casts zurückgreifen - sind sicherer).</p>
</blockquote>
<p>Bockmist!<br />
foo(static_cast&lt;char&gt;(5)); ist nicht sicherer als foo(char(5)); oder foo((char)5);</p>
</blockquote>
<p>Aber dies:<br />
IrgendeineFunktion((BYTE*)&quot;Irgendein String&quot;);<br />
empfinde ich als Sicherheitsrisiko - wenn man sich nicht darauf verlässt das BYTE* gleich char* ist. Da sehe ich lieber wenn eine reinterpretierung statt findet.</p>
<pre><code class="language-cpp">IrgendeineFunktion(reinterpret_cast&lt;BYTE*&gt;(&quot;Irgendein String&quot;));
</code></pre>
</blockquote>
<p>Da hätte ich jetzt irgendwie anders argumentiert:</p>
<pre><code class="language-cpp">IrgendeineFunktion(static_cast&lt;BYTE*&gt;(&quot;Irgendein String&quot;));
</code></pre>
<p>Gibt einen Fehler, falls es unterschiedliche Zeiger sind. Daher eben auch sicherer.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>,<br />
Benutzt du eigentlich C++ Casts oder verfolgst du den Dogmatismus &quot;Alles nur mit C Cast&quot;? Wenn du C++ Casts verwendest: wann, wo und wieso?<br />
Würde mich jetzt mal interessieren.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742718</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:23:05 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Du nimmst möglichst immer die &lt;&gt;-casts. Aus prinzipiellen Gründen.</p>
</blockquote>
<p>Ja, aus praktischen Gründen:<br />
(a) Suchmöglichkeit<br />
(b) Sicherheit<br />
(c) Konsistenz (Nicht mal C-Style Casts und dann C++ Casts)</p>
<p>Und nur dort wo nötig. Sprich: wo man sie umgehen kann nicht. Und in den Beispielen hätte man sie weitgehend umgehen können.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>Daß Du das innerhalb eines Satzes abstreitest und dann doch belegst, beleidigt meine Intelligenz.</p>
</blockquote>
<p>Ich dachte eher es beleidigt deine Arroganz.</p>
<p>Davon abgesehen ist es mir durchaus bekannt das es nicht für jeden Typ eine direkte Typisierung gibt, aber dort wo es sie gibt, kann man sie auch verwenden. Interessanterweise ist in meinen Programmen die Signalwirkung der C++ Casts dennoch vorhanden =&gt; Ich verwende so gut wie keine Casts in meinen Programmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742734</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:29:04 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>,<br />
Benutzt du eigentlich C++ Casts oder verfolgst du den Dogmatismus &quot;Alles nur mit C Cast&quot;? Wenn du C++ Casts verwendest: wann, wo und wieso?<br />
Würde mich jetzt mal interessieren.<br />
Grüssli</p>
</blockquote>
<p>ich verwende eigentlich gar keine c-casts.</p>
<p>reinterpret_cast nehme ich immer, wenn ich was reinterpretiere. wegen der signalwirkung. zum beispiel zeiger in int für i32 hash(void*).<br />
dynamic_cast nehme ich eher in</p>
<pre><code class="language-cpp">if(Foo* f=dynamic_cast&lt;Foo*&gt;(baseptr))
  f-&gt;machwas();
</code></pre>
<p>um frühe Designfehler voll auszukosten.<br />
static_cast um in der klassenhierarchie downzucasten (kein witz, aber das hatten wir schon).<br />
const_cast eher nicht.<br />
c-casts eher nicht.<br />
function style casts ganz oft. wie einstellige konstruktoren auch. es wäre auch quatsch, da einen unterschied zu machen, finde ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742738</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:45:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>function style casts ganz oft. wie einstellige konstruktoren auch. es wäre auch quatsch, da einen unterschied zu machen, finde ich.</p>
</blockquote>
<p>AH! lol ...<br />
Bisher kam es bei mir so rüber, dass du dich extrem für C Casts einsetzt <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>Aber ok, darüber kann man sich streiten. Ich persönlich nehme zwar ein static_cast für fundamentale Typen und einstelliger Konstruktor für Klassen, aber ob man jetzt bei fundamentalen Typen nicht auch den &quot;Konstruktor&quot; nehmen darf ... das ist wohl wirklich Geschmacksache <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>Aber nochmals genauer nachgefragt, wie würdest du denn das mit dem <code>BYTE*</code> machen?</p>
<pre><code class="language-cpp">foo(BYTE*(&quot;blablabla&quot;));
// oder
foo((BYTE*)&quot;blablabla&quot;);
// oder
foo(reinterpret_cast&lt;BYTE const*&gt;(&quot;blablabla&quot;)); // &lt;- meine Auswahl
// oder was anderes?

// (oder ohne const bei meiner Auswahl)
BYTE buf[] = &quot;blablabla&quot;;
foo(buf);
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742754</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 12:53:40 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>[cpp]<br />
// oder<br />
foo((BYTE*)&quot;blablabla&quot;);</p>
</blockquote>
<p>den Cast nehme ich immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742759</guid><dc:creator><![CDATA[general bacardi]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to int statt unsigned short - Wieso? on Tue, 14 Jul 2009 13:03:14 GMT]]></title><description><![CDATA[<p>Hier was zum Diskutieren für euch:</p>
<pre><code class="language-cpp">long GetPtrLong(T_Handle *handle) {
	return (long)handle-&gt;ptr;	//ptr ist ein char*
}
</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/1742767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742767</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 14 Jul 2009 13:03:14 GMT</pubDate></item></channel></rss>