<?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[Adresse einer Funktion]]></title><description><![CDATA[<p>Hey Leute,<br />
mir ist eben etwas aufgefallen, was ich sehr komisch finde. Wieso wird die Adresse einer Funktion immer mit 1 angeben. Wenn ich die Adresse ausgeben will, erhalte ich nur eine 1 und der Compiler warnt mich, da es immer als eine 1 ausgewertet wird.<br />
Kann mir vielleicht jemand erklären warum das so ist bzw was für einen Sinn das hat?</p>
<p>Schonmal vielen Dank</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286035/adresse-einer-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 02:34:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286035.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 May 2011 14:03:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:03:43 GMT]]></title><description><![CDATA[<p>Hey Leute,<br />
mir ist eben etwas aufgefallen, was ich sehr komisch finde. Wieso wird die Adresse einer Funktion immer mit 1 angeben. Wenn ich die Adresse ausgeben will, erhalte ich nur eine 1 und der Compiler warnt mich, da es immer als eine 1 ausgewertet wird.<br />
Kann mir vielleicht jemand erklären warum das so ist bzw was für einen Sinn das hat?</p>
<p>Schonmal vielen Dank</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057190</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 14:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:06:27 GMT]]></title><description><![CDATA[<p>Machs doch so: <a href="http://ideone.com/0yLio" rel="nofollow">http://ideone.com/0yLio</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057192</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 02 May 2011 14:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:06:33 GMT]]></title><description><![CDATA[<p>Häh?<br />
Vielleicht wird die Adresse beim Vergleich implizit nach 1 (true) konvertiert, aber die Adresse einer Funktion sollte so gut wie nie 1 sein. Zeig doch mal deinen Codeschnipsel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057193</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 02 May 2011 14:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:33:16 GMT]]></title><description><![CDATA[<p>Also so wollt ich das machen, dachte zumindest das es so geht:</p>
<pre><code class="language-cpp">void func()
{
   cout &lt;&lt; &quot;func&quot; &lt;&lt; endl;
}

int main()
{
   cout &lt;&lt; std::hex &lt;&lt; func &lt;&lt; endl;
   // oder cout &lt;&lt; std::hex &lt;&lt; &amp;func &lt;&lt; endl;
}
</code></pre>
<p>Jedoch erhalte ich dann nur eine 1 bzw 0x1 und der Compiler meldet immer eine Auswertung als true.<br />
Ist mein Versuch die Adresse zu ermitteln etwa falsch?</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057217</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 14:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:48:23 GMT]]></title><description><![CDATA[<p>Sieht so aus, als würde bei der Overload Resolution der <code>&lt;&lt;operator(bool)</code> aufgerufen. Und die Adresse der Funktion als bool ist natürlich true bzw. 1. Probiere mal casten in void*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057233</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 02 May 2011 14:48:23 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 14:52:07 GMT]]></title><description><![CDATA[<p>&amp;func ist korrekt, func tut´s aber auch. Bei mir wird bei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void func()
{
}

int main()
{
   std::cout &lt;&lt; std::hex &lt;&lt; func &lt;&lt; std::endl;
   std::cout &lt;&lt; std::hex &lt;&lt; &amp;func &lt;&lt; std::endl;
}
</code></pre>
<p>zweimal 40117c ausgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057236</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 02 May 2011 14:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Tue, 22 Nov 2011 14:37:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ostream::operator&lt;&lt;
</code></pre>
<p>hat keine überladene Funktion für Pointer, bzw. nur</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt; (const void* val );
</code></pre>
<p>und einen Funktionszeiger kann ja nicht nach void* konvertiert werden, also wird der Compiler wohl eine bool-Konvertierung durchführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057258</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 22 Nov 2011 14:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:31:31 GMT]]></title><description><![CDATA[<p>Also unter CodeBlocks mit GCC kam auch mit</p>
<pre><code class="language-cpp">cout &lt;&lt; hex &lt;&lt; &amp;func &lt;&lt; endl;
</code></pre>
<p>immer nur eine 1 heraus, mit MSVC, kommt jedoch bei</p>
<pre><code class="language-cpp">cout &lt;&lt; hex &lt;&lt; &amp;func &lt;&lt; endl;
cout &lt;&lt; hex &lt;&lt; func &lt;&lt; endl;
cout &lt;&lt; &amp;func &lt;&lt; endl;
cout &lt;&lt; func &lt;&lt; endl;
</code></pre>
<p>immer das gleiche heraus, nämlich eine Speicheradresse. Da versteht dann der GCC wohl was falsch oder?</p>
<p>Was mir aber aufgefallen ist, wieso hat auch eine Inline-Funktion einen Speicherplatz? Wird also für eine Inline-Funktion trotzdem Speicher reserviert und sie wird auch gespeichert, allerdings wird dort nie hingesprungen, sondern es wird eben vom Compiler geinlint( klar, er muss nicht inlinen, ich mein nur für den Fall dass er es macht)?</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057259</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 15:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:33:58 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>&amp;func ist korrekt, func tut´s aber auch. Bei mir wird bei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void func()
{
}

int main()
{
   std::cout &lt;&lt; std::hex &lt;&lt; func &lt;&lt; std::endl;
   std::cout &lt;&lt; std::hex &lt;&lt; &amp;func &lt;&lt; std::endl;
}
</code></pre>
<p>zweimal 40117c ausgegeben.</p>
</blockquote>
<p>Welchen Compiler verwendest du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057261</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 02 May 2011 15:33:58 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:37:46 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Da versteht dann der GCC wohl was falsch oder?</p>
</blockquote>
<p>Ist es nicht vielmehr so, dass der MSVC irgendwas anderes macht. Wenn der Standard keine passende, überladene ostream::operator&lt;&lt; Funktion bietet, wie soll dann eine aufgerunfen werden? Ich finde das Verhalten vom GCC absolut nachvollziehbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057265</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 02 May 2011 15:37:46 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:41:35 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ostream::operator&lt;&lt;
</code></pre>
<p>hat keine überladene Funktion für Pointer, bzw. nur</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt; (const void* val );
</code></pre>
<p>und einen Funktionszeiger kann ja nicht nach void* konvertiert werden, also wird der Compiler wohl eine implizite bool-Konvertierung durchführen.</p>
</blockquote>
<p>Sorry, hatte deine Post zu spät gesehen.<br />
Wenn ich beim GCC in allen 4 Zeilen, meines vorherigen Codes, anstatt func bzw &amp;func das ganze mittels reinterpret_cast zu void* caste, kommt auch bei allen 4 Versionen die gleiche Speicheradresse heraus.</p>
<p>Beim MVSC geht es allerdings ohne zu casten, hat er dann weiter überladene &lt;&lt;-Operatoren überladen oder wieso geht es dort?</p>
<p>std::hex benötige ich allerdings wie gesagt generell nicht, das Ergebnis wird auch so in hex ausgegeben( beim GCC mit dem cast zum void* und beim MSVC einfach so)</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057266</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 15:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:43:06 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>fr33g schrieb:</p>
<blockquote>
<p>Da versteht dann der GCC wohl was falsch oder?</p>
</blockquote>
<p>Ist es nicht vielmehr so, dass der MSVC irgendwas anderes macht. Wenn der Standard keine passende, überladene ostream::operator&lt;&lt; Funktion bietet, wie soll dann eine aufgerunfen werden? Ich finde das Verhalten vom GCC absolut nachvollziehbar.</p>
</blockquote>
<p>Jetzt war mein Post wieder zu langsam...ich meinem letzen Post habe ich dir ja zugestimmt;-)</p>
<p>Aber was ist denn jetzt eg wegen dem inline und wie kann es eg kommen, dass der MVSC was macht, was eg nicht so vom Standard vorgesehen ist?</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057267</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 15:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 15:48:32 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>... reinterpret_cast zu void* caste, kommt auch bei allen 4 Versionen die gleiche Speicheradresse heraus.</p>
</blockquote>
<p>Ok, mittels reinterpret_cast. Aber wir wissen ja, dass der reinterpret_cast wirklich alles mögliche hin und her biegen kann. <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>fr33g schrieb:</p>
<blockquote>
<p>Beim MVSC geht es allerdings ohne zu casten, hat er dann weiter überladene &lt;&lt;-Operatoren überladen oder wieso geht es dort?</p>
</blockquote>
<p>Hmm, weiß ich nun auch nicht. Müssen wir mal warten, ob die Profis nachher kurz etwas dazu sagen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2057270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057270</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 02 May 2011 15:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 16:02:19 GMT]]></title><description><![CDATA[<p>Hoffentlich, weil das interessiert mich jetzt schon <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>Außerdem würde mich auch wie gesagt interessieren, wie das bei Inline-Funktionen ist, ob die also wirklich auch im Arbeitsspeicher untergebracht werden.</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057276</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 16:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 16:11:11 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Außerdem würde mich auch wie gesagt interessieren, wie das bei Inline-Funktionen ist, ob die also wirklich auch im Arbeitsspeicher untergebracht werden.</p>
</blockquote>
<p>Steht eigentlich alles im Effektive C++:</p>
<ul>
<li>inline ist keine zwingende Anweisung, sondern ein Ratschlag. Der Compiler muss sich nicht dran halten.</li>
<li>Wenn er es inline macht, dann ist die Funktion nicht im Arbeitsspeicher untergebracht, es sei denn man nimmt ihre Adresse. inline-Funktionen verhalten sich ja wie echte Funktionen.</li>
<li>Die anderen Aufrufe werden aber dennoch geinlined</li>
<li>Wie immer: So ist es in der Praxis, der Standard garantiert nichts und du kannst dich nicht drauf verlassen. Und wenn man sich auf so etwas verlässt, ist einem wirklich nicht zu helfen <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="😉"
    /></li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2057283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057283</guid><dc:creator><![CDATA[keinprofi]]></dc:creator><pubDate>Mon, 02 May 2011 16:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 18:27:05 GMT]]></title><description><![CDATA[<p>keinprofi schrieb:</p>
<blockquote>
<p>inline ist keine zwingende Anweisung, sondern ein Ratschlag. Der Compiler muss sich nicht dran halten.</p>
</blockquote>
<p>Das ist nicht richitg. Der Compiler versucht immer eine Inline-Expansion durchzuführen (wenn es sich lohnt ja, ansonsten nein), egal ob du <em>inline</em> schreibst oder nicht. Das Problem ist (<em>inline</em> schafft dazu dann Abhilfe), dass die Inline-Expansion nur dann durchgeführt werden kann, wenn sich Funktiondefinition und Aufrufstelle in derselben Übersetzungseinheit befinden. Falls dies nicht der Fall ist, kannst du <em>inline</em> benutzen, und ermöglichst somit dem Compiler, dass er die Funktion in einer entsprechenden Header definieren darf.</p>
<p>Siehe auch FAQ: <a href="http://www.c-plusplus.net/forum/105893" rel="nofollow">http://www.c-plusplus.net/forum/105893</a></p>
<p>[EDIT] editiert nach davies Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057295</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 02 May 2011 18:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 16:52:12 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Das ist nicht richitg. Der Compiler versucht immer eine Inline-Expansion durchzuführen (wenn es sich lohnt ja, ansonsten nein), egal ob du <em>inline</em> schreibst oder nicht.</p>
</blockquote>
<p>Wo hab ich das behauptet?</p>
<p>inline-FAQ schrieb:</p>
<blockquote>
<p>Da es ihm damit auch freigestellt ist, ob er einen Funktionsaufruf inline expandiert, kann es kein Sprachmittel geben, mit dem man dieses Verhalten erzwingen kann</p>
</blockquote>
<p>keinprofi schrieb:</p>
<blockquote>
<p>inline ist keine zwingende Anweisung, sondern ein Ratschlag. Der Compiler muss sich nicht dran halten.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2057307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057307</guid><dc:creator><![CDATA[keinprofi]]></dc:creator><pubDate>Mon, 02 May 2011 16:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 18:36:27 GMT]]></title><description><![CDATA[<p>keinprofi schrieb:</p>
<blockquote>
<p>inline-FAQ schrieb:</p>
<blockquote>
<p>Da es ihm damit auch freigestellt ist, ob er einen Funktionsaufruf inline expandiert, kann es kein Sprachmittel geben, mit dem man dieses Verhalten erzwingen kann</p>
</blockquote>
<p>keinprofi schrieb:</p>
<blockquote>
<p>inline ist keine zwingende Anweisung, sondern ein Ratschlag. Der Compiler muss sich nicht dran halten.</p>
</blockquote>
</blockquote>
<p>Ich glaube du verwechselst hier zwei paar Sachen:<br />
Dem Compiler ist die <em>Inline-Expansion</em> freigestellt. Wenn es sich lohnt macht er es, wenn nicht dann nicht. Das Keyword <em>inline</em> hat nichts mit der <em>Inline-Expansion</em> zu tun.</p>
<p>Inline-Expansion = Statt an die Adresse der Funktion zu springen, wird der Code der Funktion an der Aufrufstelle eingefügt.</p>
<p>Keyword inline = Hey Compiler, ich erlaube dir, dass du die Funktion in der entsprechenden Header definieren darfst, sodass du dann in der Lage bist, eventuell eine Inline-Expansion durchzuführen.</p>
<p>[EDIT] editiert nach davies Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057317</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 02 May 2011 18:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 17:30:45 GMT]]></title><description><![CDATA[<p>Man könnte fast meinen, du würdest glauben, dass folgender Code-Ausschnitt in Ordnung wäre:</p>
<pre><code class="language-cpp">//foo.cpp
inline void f ()
{
}

void foo ()
{
  f();
}

//bar.cpp
inline void f ();

void bar ()
{
  f();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2057332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057332</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Mon, 02 May 2011 17:30:45 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 18:25:26 GMT]]></title><description><![CDATA[<p>außerdem ist auch ein reinterpret_cast hier nicht möglich. sizeof(void*) liefert nämlich nicht garantiert denselben wert wie sizeof(void(*)()). der &quot;beste&quot; weg (der einzige) ist es, den funktionszeiger in einen integralen typ zu konvertieren:</p>
<pre><code class="language-cpp">cout &lt;&lt; hex &lt;&lt; reinterpret_cast&lt;long&gt;(&amp;fun) &lt;&lt; endl;
</code></pre>
<p>der compiler sollte dich dann zumindest warnen, falls long zu klein für den zeiger ist, und es ist erlaubt.</p>
<p>GCC ist zumindest mit dem teil richtig, der den zeiger auf die funktion in einen bool umwandelt, diese konvertierung ist nämlich explizit erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057361</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Mon, 02 May 2011 18:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Mon, 02 May 2011 18:43:59 GMT]]></title><description><![CDATA[<p>Vielen Dank Leute, jetzt verstehe ich das ganze.<br />
Noch eine kurze Frage, bei Templates verhält es sich doch genau so? Wenn ein Template instanziert wird( ich meien jetzt Template-Funktionen) und es nicht geinlint wird, dann schreibt der Compiler ja die entsprechende Version der Funktion und diese kommt dann logischerweise auch in den Arbeitsspeicher oder?</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057372</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 02 May 2011 18:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse einer Funktion on Tue, 03 May 2011 07:42:55 GMT]]></title><description><![CDATA[<p>die jeweilige spezialisierung, natürlich. aber ein bisschen aufpassen musst du in deinen formulierungen. der compiler schreibt die objektdateien, und natürlich erzeugt er code für jede (implizite oder explizite) instanziierung eines funktionstemplates, einmal; (edit: schau dir im standard kapitel 3.2 zur one-definition-rule an) genauso, wie er für jede inline-funktion mit externer linkage nur etwas erzeugt, das sich so verhält, als gäbe es es nur einmal. dir kann, wenn du bei standard c++ bleibst, zuerst mal völlig egal sein, wer was wie erzeugt und was in den arbeitsspeicher wann und wo und wie geladen wird. C++ (03) macht hier sowieso wenige garantien, was reihenfolgen oder so etwas anbelangt. der standard garantiert dir nur, dass von jeder funktion mit externer linkage du jederzeit einen funktionszeiger auf diese funktion bekommen kannst, der über alle übersetzungseinheiten hinweg denselben &quot;wert&quot; haben muss, den du in einen beliebigen anderen funktionszeiger (aber nicht elementfunktionszeiger oder &quot;normalen&quot; zeiger) oder nach bool konvertieren kannst (oder in einen integralen typen, der groß genug ist) und wieder zurück, so dass nach der rückkonvertierung der zeiger wieder auf dasselbe &quot;ding&quot; zeigt.</p>
<p>aber der standard garantiert dir z.b. nicht einmal folgendes:</p>
<pre><code class="language-cpp">//foo.cpp
int foo () { return 0; }

//main.cpp
int foo ();

typedef void (*fun_ptr) ();

int main ()
{
   fun_ptr ptr = reinterpret_cast&lt;fun_ptr&gt;(foo());
   assert (ptr == 0); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2057577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057577</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Tue, 03 May 2011 07:42:55 GMT</pubDate></item></channel></rss>