<?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[Kann man jedes C++-Programm cast-frei schreiben?]]></title><description><![CDATA[<p>Kann man jedes C++-Programm cast-frei schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156439/kann-man-jedes-c-programm-cast-frei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 21:24:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156439.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Aug 2006 16:36:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 16:36:57 GMT]]></title><description><![CDATA[<p>Kann man jedes C++-Programm cast-frei schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118560</guid><dc:creator><![CDATA[caster]]></dc:creator><pubDate>Wed, 16 Aug 2006 16:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 17:02:56 GMT]]></title><description><![CDATA[<p>warum sollte man das wollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118583</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Aug 2006 17:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 17:34:32 GMT]]></title><description><![CDATA[<p>Man wird wohl jedes Problem ohne casts Lösen können. Aber oft ist das bestimmt nicht empfehlenswert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118615</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Wed, 16 Aug 2006 17:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 17:36:41 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>warum sollte man das wollen?</p>
</blockquote>
<p>weil casts immer einen unsicherheitsfaktor darstellen. Natürlich spricht nichts gegen implizite casts, aber sobald man nachhelfen muss, muss man sich fragen, ob bislang alles richtig gelaufen ist(es gibt zwar fälle bei denen man um einen Cast nicht herumkommt, aber die kann man auch an einer Hand abzählen).</p>
<p>aber ich stell mal die gegenfrage: warum sollte man das nicht wollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118617</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 16 Aug 2006 17:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 17:57:30 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>warum sollte man das wollen?</p>
</blockquote>
<p>weil casts immer einen unsicherheitsfaktor darstellen.</p>
</blockquote>
<p>damit kann ich nichts anfangen. jedes sprachmittel ist potentiell ein unsicher heitsfaktor, wenn man nicht weiß, was man tut.[quote]</p>
<blockquote>
<p>aber ich stell mal die gegenfrage: warum sollte man das nicht wollen?</p>
</blockquote>
<p>warum sollte man sich von vornherein sprachmittelen verschließen, die nicht prinzipiell mit overhead verbunden sind (das ist ja etwas, das in einzelfällen gegen RTTI/exceptions und z.T. templates spricht)? insbesondere dem function-style-cast entkommt man nur schwer, wenn man lesbaren und einigermaßen kompakten code schreiben will, schon ein simples</p>
<pre><code class="language-cpp">std::string(&quot;foo&quot;)
</code></pre>
<p>ist ja so etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118629</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Aug 2006 17:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 18:50:34 GMT]]></title><description><![CDATA[<p>ich meinte jetzt nur C-cast und *_cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118669</guid><dc:creator><![CDATA[OP]]></dc:creator><pubDate>Wed, 16 Aug 2006 18:50:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 18:56:34 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>ich meinte jetzt nur C-cast und *_cast</p>
</blockquote>
<p>Da man jeden C-Cast als function-style-cast oder als *_cast schreiben kann: ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118673</guid><dc:creator><![CDATA[Lolz]]></dc:creator><pubDate>Wed, 16 Aug 2006 18:56:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Wed, 16 Aug 2006 18:58:05 GMT]]></title><description><![CDATA[<p>Lolz schrieb:</p>
<blockquote>
<p>OP schrieb:</p>
<blockquote>
<p>ich meinte jetzt nur C-cast und *_cast</p>
</blockquote>
<p>Da man jeden C-Cast als function-style-cast oder als *_cast schreiben kann: ja</p>
</blockquote>
<p>echt? wie kann ich function-style einen std::string auf eine std::map casten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118674</guid><dc:creator><![CDATA[OP]]></dc:creator><pubDate>Wed, 16 Aug 2006 18:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 06:46:49 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>Lolz schrieb:</p>
<blockquote>
<p>OP schrieb:</p>
<blockquote>
<p>ich meinte jetzt nur C-cast und *_cast</p>
</blockquote>
<p>Da man jeden C-Cast als function-style-cast oder als *_cast schreiben kann: ja</p>
</blockquote>
<p>echt? wie kann ich function-style einen std::string auf eine std::map casten?</p>
</blockquote>
<p>Wie geht das denn mit C-Cast? So jedenfalls nicht:</p>
<pre><code class="language-cpp">std::string s;
  std::map&lt;int, int&gt; m;
  m = (std::map&lt;int, int&gt;)s;
</code></pre>
<p>Mir fällt dennoch ein Beispiel ein, wo man mit function-style casts nicht weiter kommt. Und zwar den cast zu einen Zeiger auf eine Funktion. Dieser ist prinzipiell nicht erlaubt und nur mit C-style-casts zu lösen. Das ist mir bei der Verwendung von dlsym(3) aufgefallen.</p>
<p>Aber der caster hat schon recht, wenn er casts vermeiden möchte. In der Regel sind explizite casts in welcher Form auch immer ein Indiz für schlechtes Design. Ich Betone: In der Regel! Es gibt natürlich Fälle, wo das Sinnvoll ist, aber die sind imho eher selten.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118872</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 17 Aug 2006 06:46:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 06:58:11 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Mir fällt dennoch ein Beispiel ein, wo man mit function-style casts nicht weiter kommt. Und zwar den cast zu einen Zeiger auf eine Funktion. Dieser ist prinzipiell nicht erlaubt und nur mit C-style-casts zu lösen. Das ist mir bei der Verwendung von dlsym(3) aufgefallen.</p>
</blockquote>
<p>typedef <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/1118876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118876</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Aug 2006 06:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 08:01:30 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>Lolz schrieb:</p>
<blockquote>
<p>OP schrieb:</p>
<blockquote>
<p>ich meinte jetzt nur C-cast und *_cast</p>
</blockquote>
<p>Da man jeden C-Cast als function-style-cast oder als *_cast schreiben kann: ja</p>
</blockquote>
<p>echt? wie kann ich function-style einen std::string auf eine std::map casten?</p>
</blockquote>
<p>Wer würde sowas Krankes machen wollen? Ganz abgesehen davon dass das total bescheuert wäre ist es auch noch extrem gefährlich.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118910</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 08:49:39 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>Mir fällt dennoch ein Beispiel ein, wo man mit function-style casts nicht weiter kommt. Und zwar den cast zu einen Zeiger auf eine Funktion. Dieser ist prinzipiell nicht erlaubt und nur mit C-style-casts zu lösen. Das ist mir bei der Verwendung von dlsym(3) aufgefallen.</p>
</blockquote>
<p>typedef <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>
</blockquote>
<p>Hilft auch nicht. Und der Compiler gcc 3.3.5 sagt auch warum.</p>
<pre><code class="language-cpp">typedef void (*function_type)();

int main()
{
  void* sym = 0;
  function_type fn1 = static_cast&lt;function_type&gt;(sym);
  function_type fn2 = reinterpret_cast&lt;function_type&gt;(sym);
  function_type fn3 = dynamic_cast&lt;function_type&gt;(sym);
  function_type fn4 = (function_type)sym;
}
</code></pre>
<p>Übersetzt mit &quot;g++ -c ttt.cpp&quot; ergibt:</p>
<pre><code>ttt.cpp: In function `int main()':
ttt.cpp:7: error: invalid static_cast from type `void*' to type `void (*)()'
ttt.cpp:8: error: ISO C++ forbids casting between pointer-to-function and
   pointer-to-object
ttt.cpp:9: error: cannot dynamic_cast `sym' (of type `void*') to type `void
   (*)()' (target is not pointer or reference to class)
</code></pre>
<p>Die Zeile 8 mit dem reinterpret_cast gibt den entscheidenden Hinweis: ISO C++ verbietet das grundsätzlich. Erst der C-Style-cast erlaubt das.</p>
<p>Der Grund ist, daß das nicht portabel ist. Es gibt Systeme, bei denen Pointer auf Daten was grundsätzlich verschiedenes sind als Pointer auf Code. Da kann der Pointer den selben Wert haben, zeigen aber auf verschiedenen physikalischen Speicher.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118956</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:49:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 09:06:09 GMT]]></title><description><![CDATA[<p>Leider fehlt in dem Beispiel nun ausgerechnet der Function-Style-Cast (um den es hier ging)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118973</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 09:43:50 GMT]]></title><description><![CDATA[<p>Was meinst Du mit function-style cast? Etwa:</p>
<pre><code class="language-cpp">function_type fn5 = function_type(sym);
</code></pre>
<p>Das ist doch gewissermassen nur eine andere Schreibweise für den C-style-cast.</p>
<p>Das funktioniert schon, aber das ist ja wirklich übler stil. Der versteckt den Cast bis zur Unkenntlichkeit.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119014</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 09:44:13 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>Lolz schrieb:</p>
<blockquote>
<p>OP schrieb:</p>
<blockquote>
<p>ich meinte jetzt nur C-cast und *_cast</p>
</blockquote>
<p>Da man jeden C-Cast als function-style-cast oder als *_cast schreiben kann: ja</p>
</blockquote>
<p>echt? wie kann ich function-style einen std::string auf eine std::map casten?</p>
</blockquote>
<p>Dir ist die Bedeutung des Wortes &quot;oder&quot; schon klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119015</guid><dc:creator><![CDATA[Lolz]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 09:53:06 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Was meinst Du mit function-style cast? Etwa:</p>
<pre><code class="language-cpp">function_type fn5 = function_type(sym);
</code></pre>
<p>Das ist doch gewissermassen nur eine andere Schreibweise für den C-style-cast.</p>
</blockquote>
<p>Na da haben wir ja prima aneinander vorbei geredet <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>Ja, das nennt man landläufig function-style cast. Und ich denke eigentlich nicht dass es den Cast versteckt, denn man kann IMHO ganz gut erkennen, was gemeint ist:</p>
<pre><code class="language-cpp">std::string( &quot;Hallo&quot; ) // konstruiere einen std::string aus dem C-String &quot;hallo&quot;
int( 13.4 ) // Wandle 13.4 in ein Integer um
</code></pre>
<p>finde ich wesentlich schöner als</p>
<pre><code class="language-cpp">(std::string) &quot;Hallo&quot; // oder gar
static_cast&lt;int&gt;( 13.4 ) // irgh
</code></pre>
<p>In dem Zusammenhang: Ein Function-Style-Cast auf einen Zeiger geht generell nicht, da dieser Cast für zusammengesetzte Typen nicht definiert ist, im Sinne von</p>
<pre><code class="language-cpp">const char* x = &quot;Hallo, welt&quot;;
const unsigned char*( x )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1119023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119023</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 09:56:43 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>Mir fällt dennoch ein Beispiel ein, wo man mit function-style casts nicht weiter kommt. Und zwar den cast zu einen Zeiger auf eine Funktion. Dieser ist prinzipiell nicht erlaubt und nur mit C-style-casts zu lösen. Das ist mir bei der Verwendung von dlsym(3) aufgefallen.</p>
</blockquote>
<p>typedef <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>
</blockquote>
<p>Hilft auch nicht. Und der Compiler gcc 3.3.5 sagt auch warum.</p>
<pre><code class="language-cpp">typedef void (*function_type)();

int main()
{
  void* sym = 0;
  function_type fn1 = static_cast&lt;function_type&gt;(sym);
  function_type fn2 = reinterpret_cast&lt;function_type&gt;(sym);
  function_type fn3 = dynamic_cast&lt;function_type&gt;(sym);
  function_type fn4 = (function_type)sym;
}
</code></pre>
<p>Übersetzt mit &quot;g++ -c ttt.cpp&quot; ergibt:</p>
<pre><code>ttt.cpp: In function `int main()':
ttt.cpp:7: error: invalid static_cast from type `void*' to type `void (*)()'
ttt.cpp:8: error: ISO C++ forbids casting between pointer-to-function and
   pointer-to-object
ttt.cpp:9: error: cannot dynamic_cast `sym' (of type `void*') to type `void
   (*)()' (target is not pointer or reference to class)
</code></pre>
<p>Die Zeile 8 mit dem reinterpret_cast gibt den entscheidenden Hinweis: ISO C++ verbietet das grundsätzlich. Erst der C-Style-cast erlaubt das.</p>
<p>Der Grund ist, daß das nicht portabel ist. Es gibt Systeme, bei denen Pointer auf Daten was grundsätzlich verschiedenes sind als Pointer auf Code. Da kann der Pointer den selben Wert haben, zeigen aber auf verschiedenen physikalischen Speicher.</p>
<p>Tntnet</p>
</blockquote>
<p>ah. jetzt wird klar, was du meinst. du täuscht dich allerdings hinsichtlich des casts von objekt-pointern in funktionspointer. das ist in C++ grundsätzlich nicht erlaubt, auch nicht mit C-style casts (es wird möglicherweise im nächsten standard conditional-defined sein). wenn du den compiler als beleg heranziehst, benutz doch bitte einen modus ohne spracherweiterungen (-ansi -std=c++98). in C99 ist dieser cast durchaus erlaubt und g++ lässt diese erweiterung offenbar auch für c++ zu, ohne aber alle syntaktisch denkbaren formen zu ermöglichen. ein cast von funktionspointern in andere funktionspointer ist dagegen auch in C++ möglich.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>In dem Zusammenhang: Ein Function-Style-Cast auf einen Zeiger geht generell nicht, da dieser Cast für zusammengesetzte Typen nicht definiert ist, im Sinne von</p>
<pre><code class="language-cpp">const char* x = &quot;Hallo, welt&quot;;
const unsigned char*( x )
</code></pre>
</blockquote>
<p>das geht durchaus, denn ein pointertyp kann mittels typedef durchaus auch als einfache id auftauchen. ein implementation, die std::vector iteratoren durch einfache pointer implementiert, würde zum beispiel ein konstrukt der form</p>
<pre><code class="language-cpp">std::vector&lt;int&gt;::iterator foo = std::vector&lt;int&gt;::iterator(1000);
</code></pre>
<p>zulassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119024</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 10:18:53 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>warum sollte man das wollen?</p>
</blockquote>
<p>[...]Natürlich spricht nichts gegen implizite casts[...]</p>
</blockquote>
<p>Bis auf die Tatsache, dass es soetwas nicht gibt <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 />
casts sind *explizite* Typkonvertierungen und können somit schwer implizit passieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119048</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 17 Aug 2006 10:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 10:29:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Sorry, unglücklich ausgedrückt. Meinte natürlich &quot;ohne typedef&quot; (im Bezug auf Dein Posting &quot;typedef ;)&quot;)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119053</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 10:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 11:13:21 GMT]]></title><description><![CDATA[<p>[quote=&quot;camper&quot;][quote=&quot;tntnet&quot;]</p>
<p>camper schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>...<br />
Der Grund ist, daß das nicht portabel ist. Es gibt Systeme, bei denen Pointer auf Daten was grundsätzlich verschiedenes sind als Pointer auf Code. Da kann der Pointer den selben Wert haben, zeigen aber auf verschiedenen physikalischen Speicher.</p>
<p>Tntnet</p>
</blockquote>
<p>ah. jetzt wird klar, was du meinst. du täuscht dich allerdings hinsichtlich des casts von objekt-pointern in funktionspointer. das ist in C++ grundsätzlich nicht erlaubt, auch nicht mit C-style casts (es wird möglicherweise im nächsten standard conditional-defined sein). wenn du den compiler als beleg heranziehst, benutz doch bitte einen modus ohne spracherweiterungen (-ansi -std=c++98). in C99 ist dieser cast durchaus erlaubt und g++ lässt diese erweiterung offenbar auch für c++ zu, ohne aber alle syntaktisch denkbaren formen zu ermöglichen. ein cast von funktionspointern in andere funktionspointer ist dagegen auch in C++ möglich.</p>
</blockquote>
<p>Ich weiß sehr wohl, daß der C-style cast ein Hack ist. In C++ sollte man grundsätzlich die neuen casts verwenden. Ich habe ja auch begründet, warum ein Cast eines Zeigers auf Daten auf einen Zeiger auf Funktion eigentlich keinen Sinn macht.</p>
<p>Ich will auch nicht den Compiler als Beweiß für irgenwelche Standards verwenden. Da hilft auch kein &quot;-ansi -std=c++98&quot;. Der C-style cast funktioniert mit gcc, was aber natürlich nicht heißt, daß das erlaubt ist, da er ja noch nichtmal technisch möglich sein muß.</p>
<p>Wenn ich allerdings eine shared library mit dlopen öffne und mit dlsym einen Zeiger auf eine Funktion erhalte, möchte ich diese auch aufrufen. Da einen cast von void* auf Funktionspointer zu verhindern und somit auf die c++-style-casts zu verzichten, ist nicht so direkt möglich. Da muß ich dann entweder auf den c-style-cast oder auf den funktions-style-cast (@LordJaxom: ich glaube, wir verstehen uns jetzt <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="😉"
    /> ) zurück greifen.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119080</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 17 Aug 2006 11:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 11:20:12 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string( &quot;Hallo&quot; ) // konstruiere einen std::string aus dem C-String &quot;hallo&quot;
int( 13.4 ) // Wandle 13.4 in ein Integer um
</code></pre>
<p>finde ich wesentlich schöner als</p>
<pre><code class="language-cpp">(std::string) &quot;Hallo&quot; // oder gar
static_cast&lt;int&gt;( 13.4 ) // irgh
</code></pre>
</blockquote>
<p>Das ist jetzt eine Frage, wie man das Bezeichnet. Ich lese bei int(13.4) einen Konstuktoraufruf. Und zwar gewissermassen den hypotetischen Konstruktor int::int(int), wobei das 13.4 implizit in ein int gecastet wird. Das ist also genau das selbe wie std::string(&quot;Hallo&quot;). Das finde ich in C++ so schön, daß die internen Typen genau wie selbst definierte behandelt werden. Dein static_cast ist wirklich irgh oder auch <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="🙄"
    />. Ein wenig übertrieben, aber es ist schön, daß man es so explizit hin schreiben kann, wenn man diesen Umstand betonen möchte. Das ist halt Sprachreichtum.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119085</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 17 Aug 2006 11:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kann man jedes C++-Programm cast-frei schreiben? on Thu, 17 Aug 2006 13:21:02 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>warum sollte man das wollen?</p>
</blockquote>
<p>[...]Natürlich spricht nichts gegen implizite casts[...]</p>
</blockquote>
<p>Bis auf die Tatsache, dass es soetwas nicht gibt <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 />
casts sind *explizite* Typkonvertierungen und können somit schwer implizit passieren.</p>
</blockquote>
<p>Ok, akzeptiert ;). Ist der ausdruck &quot;implizite Typkonvertierung&quot; besser?</p>
<blockquote>
<p>insbesondere dem function-style-cast entkommt man nur schwer, wenn man lesbaren und einigermaßen kompakten code schreiben will, schon ein simples</p>
<pre><code class="language-cpp">std::string(&quot;foo&quot;)
</code></pre>
<p>ist ja so etwas.</p>
</blockquote>
<p>Ich würde mal vermuten, dass dies mit einer impliziten Typkonvertierung in 99% der Fälle ohne cast hinhaut. Das letzte prozent geht für implizite Typkonvertierungen drauf, die nicht eindeutig sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119195</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 17 Aug 2006 13:21:02 GMT</pubDate></item></channel></rss>