<?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[static inline]]></title><description><![CDATA[<p>hi,</p>
<p>folgende funktion sei gegeben. macht es sinn hier ein <strong>static inline</strong> statt nur einem <strong>inline</strong> zu schreiben?</p>
<pre><code class="language-cpp">// Logarithmus von 'x' zur Basis 'n'
inline double LogN(const double &amp;x, const unsigned long &amp;n)
{
  return (log(x) / log(n));
}
</code></pre>
<p>wenn ja welchen?<br />
wenn nein warum nicht?</p>
<p>sagt <strong>static</strong> nicht, das es nur eine version von irgendetwas gibt? wenn ich das inline, wird doch ein aufruf wie:</p>
<pre><code class="language-cpp">double a = LogN(10.0, 2);
</code></pre>
<p>vom compiler zu</p>
<pre><code class="language-cpp">double a = log(10) / log(2);
</code></pre>
<p>geändert. und wenn ich das 10 mal mache (an verschiedenen stellen im code) dann inlined der das doch auch 10 mal. was bringt mir da das <strong>static</strong>? ist doch ueberflüssig oder? allerdings hab ich das <strong>static inline</strong> schon oft in fremd-bibliotheken gesehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120046/static-inline</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 05:34:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120046.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Sep 2005 12:01:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 12:01:55 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>folgende funktion sei gegeben. macht es sinn hier ein <strong>static inline</strong> statt nur einem <strong>inline</strong> zu schreiben?</p>
<pre><code class="language-cpp">// Logarithmus von 'x' zur Basis 'n'
inline double LogN(const double &amp;x, const unsigned long &amp;n)
{
  return (log(x) / log(n));
}
</code></pre>
<p>wenn ja welchen?<br />
wenn nein warum nicht?</p>
<p>sagt <strong>static</strong> nicht, das es nur eine version von irgendetwas gibt? wenn ich das inline, wird doch ein aufruf wie:</p>
<pre><code class="language-cpp">double a = LogN(10.0, 2);
</code></pre>
<p>vom compiler zu</p>
<pre><code class="language-cpp">double a = log(10) / log(2);
</code></pre>
<p>geändert. und wenn ich das 10 mal mache (an verschiedenen stellen im code) dann inlined der das doch auch 10 mal. was bringt mir da das <strong>static</strong>? ist doch ueberflüssig oder? allerdings hab ich das <strong>static inline</strong> schon oft in fremd-bibliotheken gesehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867762</guid><dc:creator><![CDATA[Gast123]]></dc:creator><pubDate>Thu, 08 Sep 2005 12:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 12:06:38 GMT]]></title><description><![CDATA[<p>Wenn ich jetzt nicht ganz falsch liege ist eine statische globale Funkion gleich wie eine statische globale Variable, sie ist also nur in ihrer Übersetzungseinheit verfügbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867768</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Thu, 08 Sep 2005 12:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 12:12:47 GMT]]></title><description><![CDATA[<p>inline ist kein MUSS, der Compiler entscheidet das selbst,<br />
ob er nun die Methode inlined oder nicht. Bei Klassen<br />
kann man es erzwingen in dem man die Methoden im Header<br />
spezifiziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867778</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Thu, 08 Sep 2005 12:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 13:13:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/642">@phlox81</a><br />
und in wie fern beantwortet das meine frage(n)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867843</guid><dc:creator><![CDATA[Gast123]]></dc:creator><pubDate>Thu, 08 Sep 2005 13:13:20 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 13:21:32 GMT]]></title><description><![CDATA[<p>Gast123 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/642">@phlox81</a><br />
und in wie fern beantwortet das meine frage(n)?</p>
</blockquote>
<p>Denken musst du selber <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="🙄"
    /></p>
<p>Evtl. wollen sie dadurch erreichen, das falls der compiler es nicht<br />
inlined, die Methode static ist. Oder sie sofort Static ist,<br />
aber dafür nicht inline. Oder doch. Kommt wohl auf den Compiler an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867852</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Thu, 08 Sep 2005 13:21:32 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 13:58:52 GMT]]></title><description><![CDATA[<p>eine nicht statiche Methode einer Klasse ist in JEDER Instanz einer Klasse vorhanden. sie hat den this-pointer auf diese instanz, man kann somit member ansprechen, etc. pp.</p>
<p>eine statische methode einer klasse gibt es nur einmal. man benoetigt keine Instanz dieser Klasse um sie aufzurufen:</p>
<p>Klasse::StatischeMethode()</p>
<p>statische methoden haben kein this ( wo von auch? ) und koennen logischerweise nicht auf member zugreifen ( auf welche auch, bzw. wem sollten die member gehoeren ohne this?? ).<br />
ausnahmen sind andere statische member.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867879</guid><dc:creator><![CDATA[Ridley]]></dc:creator><pubDate>Thu, 08 Sep 2005 13:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 14:03:37 GMT]]></title><description><![CDATA[<p>static sollte man zugunsten von unbenannten namespaces aufgeben. und nein, das hat keinen sinn. static i.V.m. freistehenden funktionen bewirkt internal linkage, macht das betreffended object also für den linker unsichtbar, damit kann es beim linken nicht zu konflikten wegen mehrfachdefinition kommen. falls die funktion wirklich in verschiedenen ÜEs verwendet wird, wird für jede ÜE dann eine eigene kopie der funktion angelegt, obwohl diese alle identisch sind.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/642">@phlox81</a>: eine definition von funktionen in der klassendefinition bewirkt auch nur, dass diese mehrfach identisch definiert werden dürfen, so wie es der fall ist, wenn die methode ausserhalb der klassenfunktion mit inline definiert wird. keinesfalls zwingt es den compiler zu irgendetwas bei der codeerzeugung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867885</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 08 Sep 2005 14:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 18:03:26 GMT]]></title><description><![CDATA[<p>Doch, das hat sinn (keine ahnung, obs ne gcc extension ist). Ich zitiere mal sinngemäß linus:<br />
static inline bedeuted: mach die funktion inline, aber wenn das nicht geht (es wird ein pointer drauf verlangt, optimierungen sind nicht eingeschaltet, ...), mache die funktion static. extern inline bedeutet: mach die funktion inline, aber wenn das nicht geht (es wird ein pointer drauf verlangt, optimierungen sind nicht eingeschaltet, ...), habe ich eine weitere nicht-inline implementierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868112</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Thu, 08 Sep 2005 18:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 19:56:40 GMT]]></title><description><![CDATA[<p>ness schrieb:</p>
<blockquote>
<p>Doch, das hat sinn (keine ahnung, obs ne gcc extension ist). Ich zitiere mal sinngemäß linus:<br />
static inline bedeuted: mach die funktion inline, aber wenn das nicht geht (es wird ein pointer drauf verlangt, optimierungen sind nicht eingeschaltet, ...), mache die funktion static. extern inline bedeutet: mach die funktion inline, aber wenn das nicht geht (es wird ein pointer drauf verlangt, optimierungen sind nicht eingeschaltet, ...), habe ich eine weitere nicht-inline implementierung.</p>
</blockquote>
<p>also, nochmal:</p>
<p>static inline: eine out-of-line kopie pro ÜE sobald irgendwo in der ÜE die adresse dieser funktion benötigt wird, oder inlining in dieser ÜE wenigstens einmal nicht möglich bzw. nicht sinnvoll ist<br />
nur inline: eine einzige out-of-line kopie im gesamten projekt falls irgendwo die adresse benötigt wird oder inlining wenigstens einmal fehlschlägt</p>
<p>wo war jetzt nochmal der vorteil von static inline <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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="🙄"
    /> <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="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/868215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868215</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 08 Sep 2005 19:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Thu, 08 Sep 2005 20:05:22 GMT]]></title><description><![CDATA[<blockquote>
<p>Bei Klassen kann man es erzwingen in dem man die Methoden im Header spezifiziert.</p>
</blockquote>
<p>nein, kann man nicht. Die Compiler ist da ziemlich eigen ;). Vielleicht machen es einige bei niedrigen optimierungslvln, aber das glaube ich nicht.</p>
<blockquote>
<p>eine nicht statiche Methode einer Klasse ist in JEDER Instanz einer Klasse vorhanden. sie hat den this-pointer auf diese instanz, man kann somit member ansprechen, etc. pp.</p>
</blockquote>
<p>Nein. zumindest würd ich den Compiler, der so meinen kostbaren Speicher verschwendet in den müll werfen.Wozu brauch ich 50 mal fast dieselbe funktion, wenn sich nur die Basisaddressen der Objekte ändern? Es ist eher so, dass die funktion vom compiler den this pointer als zusätzliches Argument übergeben bekommt.</p>
<p>Hier ein Beispiel wie ein Compiler das machen <em>könnte</em>(denn alle compiler sind verschieden):</p>
<pre><code class="language-cpp">//erstmal so wie man es schreibt
class Foo{
    private:
        int i;
        short j;
    public:
        void doSth(){
            i=5;
            j=3;
        }
}

Foo foo;
foo.do_sth();
//und sowas kann der Compiler draus machen(Pseudocode):
struct Foo{
    int i;
    short j;
};
void doSth(void* pos){
    //da wir einen POD typ haben, liegt am basisofset direkt der integer wert, und 4 bytes weiter der short wert. 
    //Kommt vererbung ins spiel wird das ganze sofort viel komplexer...
    (*(int*)pos)=5;
    (*(short*)pos+4)=3;
}

Foo foo;
doSth((void*)&amp;foo);
</code></pre>
<p>den Compiler intressiert es also garnicht, wo die einzelnen Objekte liegen, da er nur mit offsets arbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868221</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 08 Sep 2005 20:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 06:22:34 GMT]]></title><description><![CDATA[<p>ich weiss nicht was ihr mit klassen am hut habt. mir gehts nur um einzelne funktionen, ich bau mir doch keine klasse math um dort dann so zeugs wie LogN und co. unterzubringen, faende ich jetzt viel zu umstaendlich, zumal es auch spezialisierte versionen geben kann fuer komplexe zahlen zum beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868377</guid><dc:creator><![CDATA[Gast123]]></dc:creator><pubDate>Fri, 09 Sep 2005 06:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 06:26:01 GMT]]></title><description><![CDATA[<p>also wenn ich das von <em>ness</em> richtig interpretiere, ist es auf keinen fall ein fehler ein <strong>static</strong> vor allen <strong>inline</strong>-funktionen zu haben die nicht innerhalb einer klasse liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868379</guid><dc:creator><![CDATA[Gast123]]></dc:creator><pubDate>Fri, 09 Sep 2005 06:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 08:35:11 GMT]]></title><description><![CDATA[<p>nachdem ich nun einige funktionen in meinem aktuellen projekt mit <strong>static inline</strong> (die vorher nur <strong>inline</strong> waren) versehen habe, ist die ausführbare exe um einiges grösser geworden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/868432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868432</guid><dc:creator><![CDATA[Gast123]]></dc:creator><pubDate>Fri, 09 Sep 2005 08:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 09:05:32 GMT]]></title><description><![CDATA[<p>Gast123 schrieb:</p>
<blockquote>
<p>nachdem ich nun einige funktionen in meinem aktuellen projekt mit <strong>static inline</strong> (die vorher nur <strong>inline</strong> waren) versehen habe, ist die ausführbare exe um einiges grösser geworden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>ich habe das bereits zweimal erklärt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868450</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 09 Sep 2005 09:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 12:58:07 GMT]]></title><description><![CDATA[<p>Natürlich ist es ein Fehler, _alle_ funktionen die inline sind zusätzlich static zu machen. Es ist genau so, wie camper erklärt hat. Bei größeren projekten mit internen headern und inline fuktionen kann static iline aber sinnvol sein, um kollisionen zu vermeiden/beheben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868636</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Fri, 09 Sep 2005 12:58:07 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 13:37:56 GMT]]></title><description><![CDATA[<p>dafür gibts dann unbenannte namespaces</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868673</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 09 Sep 2005 13:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to static inline on Fri, 09 Sep 2005 14:27:00 GMT]]></title><description><![CDATA[<p>Ja, aber nicht in C (OK, ist im c++ forum kein argument).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868720</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Fri, 09 Sep 2005 14:27:00 GMT</pubDate></item></channel></rss>