<?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[Explizite Typenkonvertierung - Wozu?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum wird in vierlei Leuten Codes explizite Typkonvertierung benutzt, wo dies nicht nötig ist und der Kompeiler dies implizit durchführt? Wozu soll das gut sein, es bauscht den Code doch nur unnötig auf!?</p>
<p>Liebe Weihnachtsgrüße,</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230469/explizite-typenkonvertierung-wozu</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 16:00:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230469.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Dec 2008 11:06:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sat, 27 Dec 2008 11:06:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum wird in vierlei Leuten Codes explizite Typkonvertierung benutzt, wo dies nicht nötig ist und der Kompeiler dies implizit durchführt? Wozu soll das gut sein, es bauscht den Code doch nur unnötig auf!?</p>
<p>Liebe Weihnachtsgrüße,</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636056</guid><dc:creator><![CDATA[Martin Zeucht]]></dc:creator><pubDate>Sat, 27 Dec 2008 11:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sat, 27 Dec 2008 12:18:22 GMT]]></title><description><![CDATA[<p>Das sind i.d.R. Programmierfehler.<br />
Es gibt nur wenige Gründe ein explizites Cast zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636088</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 27 Dec 2008 12:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sat, 27 Dec 2008 18:18:53 GMT]]></title><description><![CDATA[<p>Ich würde es gar nicht mal durchweg als Programmierfehler bezeichnen. Vieles basiert meinen Eindrücken aus fremden Projekten zufolge auch auf Unwissenheit. Ein paar Inkonsistenzen muss man allerdings auch der WinAPI attestieren. Da haben zB einige Funktionen schon mal LPTSTR als Parameter, obwohl es eigentlich LPCTSTR sein müsste. Das ist natürlich ungünstig, wenn man const-correctness sauber durchziehen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636225</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sat, 27 Dec 2008 18:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sun, 28 Dec 2008 01:44:06 GMT]]></title><description><![CDATA[<p>Was ich oft sehe und oft selbst schreibe, sind Konvertierungen in kleinere Typen. Also z.B. int nach char oder sowas. Einfach deswegen weil der Compiler sonst eine Warning ausspuckt, und ich es gut finde wenn ein Programm immer ohne Warnings compiliert wird. Ganz einfach deswegen, weil man sonst bei Änderungen neue Warnings, die dazugekommen sind, nichtmehr &quot;sieht&quot; (da diese in Unmengen von alten Warnings untergehen). Dadurch bringt man sich um den Vorteil bestimmte Fehler sehr einfach und schnell zu finden - nämlich indem man alle neuen Warnings durchgeht, und sich die betreffenden Stellen anguckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636378</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 28 Dec 2008 01:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sun, 28 Dec 2008 08:32:09 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Da haben zB einige Funktionen schon mal LPTSTR als Parameter, obwohl es eigentlich LPCTSTR sein müsste.</p>
</blockquote>
<p>Zum Beispiel? Mir fällt gerade nichts ein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636392</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 28 Dec 2008 08:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Mon, 29 Dec 2008 05:12:37 GMT]]></title><description><![CDATA[<p>Mir fällt als Beispiel bloss CreateProcess ein. Wobei das ein Fall ist wo man tunlichst nicht casten sollte, sondern eine temporäre Kopie in einer Wrapper-Funktion anlegen.<br />
Ansonsten hab ich das viel öfters in irgendwelchen anderen Libraries/APIs/Interfaces/... gesehen als in der WinAPI.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636717</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 29 Dec 2008 05:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Mon, 29 Dec 2008 23:38:31 GMT]]></title><description><![CDATA[<p>Mir fällt als Beispiel OpenPrinter ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637100</guid><dc:creator><![CDATA[ß]]></dc:creator><pubDate>Mon, 29 Dec 2008 23:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Tue, 30 Dec 2008 09:02:02 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Zum Beispiel? Mir fällt gerade nichts ein...</p>
</blockquote>
<p>Wie hustbaer schon sagte, CreateProcess würde auch mir spontan einfallen. Wobei ich mich etwas korrigieren muss. Es sind nicht unbedingt nur Funktionen, auch Strukturen sind diesbezüglich hin und wieder inkonsistent. Spontan würden mir Sachen wie LVITEM oder TCITEM einfallen. LPTSTR ist ja iO, wenn ich ein Element abrufen möchte. Wenn ich es aber setzen oder ein neues einfügen möchte, kann ich LPTSTR nun wirklich nicht gebrauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637170</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 30 Dec 2008 09:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Tue, 30 Dec 2008 19:18:26 GMT]]></title><description><![CDATA[<p>Die Anmerkung war doch:</p>
<blockquote>
<p>Da haben zB einige Funktionen schon mal LPTSTR als Parameter, obwohl es eigentlich LPCTSTR sein müsste.</p>
</blockquote>
<p>Dokumentiert ist es aber richtig... somit ist auch ein cast hier *nie* nötig.<br />
Das war doch der Ursprung der Frage, oder?</p>
<p>Natürlich ist es historisch bedingt und auch sehr unschön, das dort (CreateProcess) LPTSTR steht... gar keine Frage... aber was das mit dem casten zu tun hat ist mir etwas schleierhaft...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637453</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 30 Dec 2008 19:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Tue, 30 Dec 2008 23:38:08 GMT]]></title><description><![CDATA[<p>Weil man hin und wieder Code sieht, wo eben const Ausdrücke aufgrund der teilweise vorhandenen Inkonsistenzen non-const gecastet werden.</p>
<p>Nur mal ein Beispiel aus dem Pov-Ray Projekt, welches mir kürzlich über den Weg gelaufen ist.</p>
<pre><code class="language-cpp">// editorinterface.cpp

void InsertTab (LPCSTR title)
{
  // ...
  TCITEM      item ;
  // ...
  item.pszText = (LPSTR) title ;
}
</code></pre>
<p>Sowas beherbergt potenzielle Fehler und kann zu undefiniertem Verhalten führen.</p>
<p>Ich will gar nicht grossartig darauf rumreiten. Mir ist schon bewusst, dass dies historisch bedingt ist. Unschön bleibt es aber allemal und erschwert die Entwicklung teils unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637551</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 30 Dec 2008 23:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Wed, 31 Dec 2008 09:44:16 GMT]]></title><description><![CDATA[<p>Ja... da geb ich Dir ja recht... aber eigentlich müsste man so wie &quot;hustbaer&quot; geschrieben hat hier ein _strdup machen...</p>
<p>Das mit TCITEM ist ja wirklich etwas unschön... da die Struktur sowohl zum &quot;setzen&quot; (LPCTSTR) als auch zum &quot;zurückgeben&quot; (LPTSTR) verwenden kann...</p>
<p>Als API-Designer hätte ich mich wohl auch für den Kompromiss entscheiden; alternativ hätte man zwei &quot;gleiche&quot; Strukturen definieren müssen mit zwei unterschiedlichen Funktionen...</p>
<p>Aber da auf der &quot;SendMessage&quot; Ebene ja eh alles gecastest wird (API-bedingt), ist Windows eh sehr unschön...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637639</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 31 Dec 2008 09:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Wed, 31 Dec 2008 14:32:30 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Ja... da geb ich Dir ja recht... aber eigentlich müsste man so wie &quot;hustbaer&quot; geschrieben hat hier ein _strdup machen...</p>
</blockquote>
<p>Mehr als ein wenig effizienter Workaround ist das aber leider auch nicht. Eine saubere Lösung sieht für mich immer noch etwas anders aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637749</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 31 Dec 2008 14:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Thu, 01 Jan 2009 08:01:14 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Ja... da geb ich Dir ja recht... aber eigentlich müsste man so wie &quot;hustbaer&quot; geschrieben hat hier ein _strdup machen...</p>
</blockquote>
<p>Mehr als ein wenig effizienter Workaround ist das aber leider auch nicht. Eine saubere Lösung sieht für mich immer noch etwas anders aus.</p>
</blockquote>
<p>Die Lösung ist IMO sehr sauber. CreateProcess ist schweine-langsam, da kannste schonmal Kaffee trinken gehen bevor sich da was rührt. Von daher total egal ob man 1x Speicher anfordert und 1x kopiert. Alternativ kann man noch die Länge checken, und z.B. alles was &lt; 4K ist vom Stack holen (lokales Array oder alloca).</p>
<p>Im Fall CreateProcess fände ich es aber total unangebracht. std::string bzw. strdup sind viel einfacher, und für den Fall total ausreichend. Daher würde ich alles andere als &quot;unsauber&quot; bezeichnen, weil es unnötig komplex ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637911</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 01 Jan 2009 08:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Thu, 01 Jan 2009 09:12:56 GMT]]></title><description><![CDATA[<p>Naja, für den Fall von CreateProcess *musst* Du sogar ein strdup verwenden, da der String _wirklich_ beschrieben wird!<br />
Das geht noch mit der Ansi-Funktion (CreateProcessA) gut, weil intern sowieso ein beschreibbarer Puffer erzeugt wird (da nach Unicode umgewandelt wird), aber bei der Unicode-Version (CreateProcessW) stürzt Dein Programm ab, wenn Du ein (nicht beschreibarer String) übergibst... (ab VS2005 werden String-Literale in den Read-Only-Speicher gelegt!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637918</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 01 Jan 2009 09:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Fri, 02 Jan 2009 22:44:15 GMT]]></title><description><![CDATA[<p>Er.<br />
std::string in meinem Beitrag oben ist natürlich Unsinn - da man einen beschreibbaren String braucht, sollte man wenn dann std::vector verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1638595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1638595</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 02 Jan 2009 22:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Fri, 09 Jan 2009 21:10:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Die Lösung ist IMO sehr sauber. CreateProcess ist schweine-langsam, da kannste schonmal Kaffee trinken gehen bevor sich da was rührt. Von daher total egal ob man 1x Speicher anfordert und 1x kopiert.</p>
</blockquote>
<p>strdup selbst ist schon unsauber. Nicht umsonst ist diese Funktion nicht im C Standard enthalten. Und wie lange CreateProcess dauert, weisst du nicht. Für dich als Entwickler ist das erstmal eine Black Box. Von daher kann man nicht pauschal sagen, dass es egal ist.<br />
Eine saubere Lösung schaut so aus, dass CreateProcess einen const Parameter entgegennimmt. Muss dieser verändert werden, dann auch innerhalb der Funktion. Für mich als Client besteht dafür keine Notwendigkeit.<br />
Notfalls könnte man auch mit 2 Funktionen leben, eine für const und eine für non-const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1642663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1642663</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 09 Jan 2009 21:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Fri, 09 Jan 2009 21:25:03 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Die Lösung ist IMO sehr sauber. CreateProcess ist schweine-langsam, da kannste schonmal Kaffee trinken gehen bevor sich da was rührt. Von daher total egal ob man 1x Speicher anfordert und 1x kopiert.</p>
</blockquote>
<p>strdup selbst ist schon unsauber. Nicht umsonst ist diese Funktion nicht im C Standard enthalten. Und wie lange CreateProcess dauert, weisst du nicht. Für dich als Entwickler ist das erstmal eine Black Box. Von daher kann man nicht pauschal sagen, dass es egal ist.</p>
</blockquote>
<p>Unsinn.</p>
<blockquote>
<p>Eine saubere Lösung schaut so aus, dass CreateProcess einen const Parameter entgegennimmt. Muss dieser verändert werden, dann auch innerhalb der Funktion. Für mich als Client besteht dafür keine Notwendigkeit.<br />
Notfalls könnte man auch mit 2 Funktionen leben, eine für const und eine für non-const.</p>
</blockquote>
<p>CreateProcess nimmt aber nunmal keinen const Parameter. Ich meinte eine Wrapper Funktion ist eine saubere Lösung <em>wenn man CreateProcess in dieser Form als gegeben annimmt</em>.</p>
<p>Dass CreateProcess ein Design-Fehler ist hatten wir ja schon festgehalten, wieso also nochmal drauf rumreiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1642674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1642674</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 09 Jan 2009 21:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Explizite Typenkonvertierung - Wozu? on Sun, 11 Jan 2009 09:28:13 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Unsinn.</p>
</blockquote>
<p>Nö.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>CreateProcess nimmt aber nunmal keinen const Parameter. Ich meinte eine Wrapper Funktion ist eine saubere Lösung <em>wenn man CreateProcess in dieser Form als gegeben annimmt</em>.</p>
<p>Dass CreateProcess ein Design-Fehler ist hatten wir ja schon festgehalten, wieso also nochmal drauf rumreiten.</p>
</blockquote>
<p>Gute Frage. Aber wieso stellst du die mir?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643228</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 11 Jan 2009 09:28:13 GMT</pubDate></item></channel></rss>