<?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[Funktionpointer Casten]]></title><description><![CDATA[<p>Hallo,</p>
<p>darf man eigentlich Funktionszeiger nach void* casten, und dann wieder zurück?<br />
Und ist das folgende erlaubt?</p>
<pre><code class="language-cpp">float f(float v) { return v; }

float (*ptr1)(float);
ptr1 = &amp;f;
boost::any (*ptr2)(float);
ptr2 = reinterpret_cast&lt;boost::any(*)(float)&gt; ptr1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/303029/funktionpointer-casten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 00:01:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303029.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 May 2012 18:56:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionpointer Casten on Thu, 03 May 2012 18:56:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>darf man eigentlich Funktionszeiger nach void* casten, und dann wieder zurück?<br />
Und ist das folgende erlaubt?</p>
<pre><code class="language-cpp">float f(float v) { return v; }

float (*ptr1)(float);
ptr1 = &amp;f;
boost::any (*ptr2)(float);
ptr2 = reinterpret_cast&lt;boost::any(*)(float)&gt; ptr1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2208039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208039</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Thu, 03 May 2012 18:56:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionpointer Casten on Thu, 03 May 2012 19:04:23 GMT]]></title><description><![CDATA[<p>2x nein.</p>
<p>Funktionszeiger sind von normalen Zeigern verschieden (void* ist ein normaler Zeiger), daher geht der Cast nach void* nicht.</p>
<p>Und dein reinterpretcast zeigt schon an, dass beim zweiten etwas nicht stimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208046</guid><dc:creator><![CDATA[awrgjna&amp;lt;]]></dc:creator><pubDate>Thu, 03 May 2012 19:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionpointer Casten on Thu, 03 May 2012 21:25:17 GMT]]></title><description><![CDATA[<p>pyhax schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>darf man eigentlich Funktionszeiger nach void* casten, und dann wieder zurück?</p>
</blockquote>
<p>conditionally-supported. Eine Implementation darf das erlauben, muss aber nicht (5.2.10/8). Wenn es unterstützt wird, muss die Rückkonvertierung den ursprünglichen Wert ergeben.</p>
<p>pyhax schrieb:</p>
<blockquote>
<p>Und ist das folgende erlaubt?</p>
<pre><code class="language-cpp">...
</code></pre>
</blockquote>
<p>Von Syntaxfehlern abgesehen, ja. Funktionszeiger können ineinander (per reinterpret_cast) konvertiert werden. Eine Rückkonvertierung in den ursprünglichen Typ ergibt auch den ursprünglichen Wert. Man kann also irgendeinen Funktionszeiger Typ zum Speichern beliebiger Funktionszeiger verwenden (analog zu void* für Objektzeiger).<br />
Ein Aufruf mit dem falschen Typ führt zu UB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208091</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 03 May 2012 21:25:17 GMT</pubDate></item></channel></rss>