<?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[Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden?]]></title><description><![CDATA[<p>Hi,</p>
<p>Wenn ich in einer Headerdatei in einer Klasse A Objekte der Klasse B durch einen Zeiger nutze und Klasse B nur durch Vorwärtsdeklaration bekannt ist und ich ferne eine Methode der Klasse A habe, welche ein Einzeiler ist und Klasse B aber nutzt, sodass ich die Implementation in die Quellcodedatei der Klasse A stecken muss, kann ein aktueller Compiler dann trotzdem wohl inlinen?</p>
<p>Hoffe, die Frage ist so schon klar, sonst liefer ich Code. <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>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275070/inline-optimierung-durch-klassenunbekanntheit-bei-deklaration-unterbunden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 06:16:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275070.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Oct 2010 12:12:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Fri, 08 Oct 2010 12:12:26 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Wenn ich in einer Headerdatei in einer Klasse A Objekte der Klasse B durch einen Zeiger nutze und Klasse B nur durch Vorwärtsdeklaration bekannt ist und ich ferne eine Methode der Klasse A habe, welche ein Einzeiler ist und Klasse B aber nutzt, sodass ich die Implementation in die Quellcodedatei der Klasse A stecken muss, kann ein aktueller Compiler dann trotzdem wohl inlinen?</p>
<p>Hoffe, die Frage ist so schon klar, sonst liefer ich Code. <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>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1962875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1962875</guid><dc:creator><![CDATA[Eisflamme off]]></dc:creator><pubDate>Fri, 08 Oct 2010 12:12:26 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Fri, 08 Oct 2010 12:23:00 GMT]]></title><description><![CDATA[<p>Hat Klasse B irgendwas damit zu tun? Das was du beschreibst ist doch einfach der ganz normale Fall, dass eine Funktion in einer anderen Übersetzungseinheit definiert ist. Ja, das können moderne Compiler inlinen, ist aber ziemlich aufwändig und muss daher meistens mit speziellen Compileroptionen aktiviert werden. Das nennt sich dann &quot;interprocedural optimization&quot;, &quot;whole program optimization&quot;, &quot;link time optimization&quot; oder ähnliches.</p>
<p>edit: Konkret können das mindestens die Compiler von GNU, Intel und Microsoft, andere vermutlich aber auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1962880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1962880</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 08 Oct 2010 12:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Fri, 08 Oct 2010 12:41:25 GMT]]></title><description><![CDATA[<p>Die Technik, die das erlauben würde, nennt sich Link-Time-Optimization (LTO). Zumindest beim GCC muss man LTO explizit einschalten. Es ist auch ein relativ neues Feature. Wenn ich mich nicht irre, unterstützt der Compiler clang/clang++ das auch. Wie es bei Microsoft aussieht, weiß ich nicht.</p>
<p>Edit: Mist! Zu spät... <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>
<p>Edit2: Ich habe es gerade mit dem GCC ausprobieren wollen und habe folgende Meldung bekommen:</p>
<pre><code>cc1plus: Fehler: LTO support has not been enabled in this configuration
</code></pre>
<p>So populär/verbreitet/ausgereift(?) scheint das noch nicht zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1962881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1962881</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 08 Oct 2010 12:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Fri, 08 Oct 2010 13:07:58 GMT]]></title><description><![CDATA[<p>LTO sollte man während der Entwicklung von großen Programmen aber vermeiden, siehe auch <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1952161.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1952161.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1962906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1962906</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Fri, 08 Oct 2010 13:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Fri, 08 Oct 2010 14:25:50 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Wie es bei Microsoft aussieht, weiß ich nicht.</p>
</blockquote>
<p>MSVC++ 2008 Professional unterstützt Linkzeit-Codegenerierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1962944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1962944</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 08 Oct 2010 14:25:50 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 00:38:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Danke erstmal.<br />
Okay, LTO klingt doch schon Mal cool.</p>
<p>SeppJ:<br />
Ja, das ist ein absoluter Standardfall, aber ich kenn mich leider nicht so mit den Optimierungsmöglichkeiten des Compilers aus. Steht das bei VC irgendwo in der Doc oder wo finde ich solche Infos? <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>
<p>Ich habe zur Zeit halt die Wahl, entweder B nur vorwärts-zu-deklarieren oder komplett einzubinden. Angenommen, die gängigen Compiler sind nicht dazu in der Lage LTO zu nutzen, dann würde ich den B-Header in A halt lieber inkludieren.</p>
<p>Danke. Wenn es dazu sonst nichts Interessantes mehr gibt, geht es wohl in dem LTO-Thread weiter, lol <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/1963180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963180</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 09 Oct 2010 00:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 06:09:52 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Danke erstmal.<br />
Okay, LTO klingt doch schon Mal cool.</p>
<p>SeppJ:<br />
Ja, das ist ein absoluter Standardfall, aber ich kenn mich leider nicht so mit den Optimierungsmöglichkeiten des Compilers aus. Steht das bei VC irgendwo in der Doc oder wo finde ich solche Infos? <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>
<p>Ich habe zur Zeit halt die Wahl, entweder B nur vorwärts-zu-deklarieren oder komplett einzubinden. Angenommen, die gängigen Compiler sind nicht dazu in der Lage LTO zu nutzen, dann würde ich den B-Header in A halt lieber inkludieren.</p>
<p>Danke. Wenn es dazu sonst nichts Interessantes mehr gibt, geht es wohl in dem LTO-Thread weiter, lol <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>
</blockquote>
<p>Includes in Headern schrauben nur die Compilezeit nach oben, wenn das Projekt mal groß wird und jedesmal bei kleinen Änderungen alles gebaut wird, weil du zuviele unnötige Includes hast. Und ob dieses inline was bringt hast du sicher noch nicht mal gemessen. Du produzierst nur schlechten Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963205</guid><dc:creator><![CDATA[neeeee]]></dc:creator><pubDate>Sat, 09 Oct 2010 06:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 10:39:52 GMT]]></title><description><![CDATA[<p>Ja, tu das nicht. Extreme Kompilierzeiten bei jeder Anwendung sind absolut benutzerunfreundlich.</p>
<p>Ich habe beispielsweise vor Kurzem die Ogre-Grafikbibliothek angeschaut, und bereits für das Hello-World-Beispiel musste ich fast eine Minute kompilieren. Ein einziges Modell mit 0815-Einstellungen gezeichnet... Das kanns ja echt nicht sein! Und ich habe nachgeschaut, die Entwickler haben sinnlos viele Header eingebunden, wo eine Vorwärtsdeklaration gereicht hätte. Von Pimpl und so keine Spur... <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>Umso grösser war meine Freude, als ich zu Irrlicht umstieg und da für die <strong>ganze</strong> Bibliothek 3 Sekunden kompilieren musste! Da wurde echt was überlegt. <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/1963251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963251</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Oct 2010 10:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 11:27:00 GMT]]></title><description><![CDATA[<p>Für myGame?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963270</guid><dc:creator><![CDATA[af]]></dc:creator><pubDate>Sat, 09 Oct 2010 11:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 11:39:14 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>...die Entwickler haben sinnlos viele Header eingebunden, wo eine Vorwärtsdeklaration gereicht hätte. Von Pimpl und so keine Spur... <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>
</blockquote>
<p>Kann der Compiler Pimpl wegoptimieren und alles inlinen? Sonst geht das mal garnicht!!!!!1efl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963275</guid><dc:creator><![CDATA[hallo!!!!]]></dc:creator><pubDate>Sat, 09 Oct 2010 11:39:14 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 12:03:23 GMT]]></title><description><![CDATA[<p>Eine Vorwärtsdeklaration ist nur dann ausreichend, wenn es unerheblich ist, ob der Compiler Informationen über den Typ hat oder nicht. Und wenn der Compiler diese Informationen benötigt, ist LTO aus dem Rennen. LTO ist dazu da Optimierungen vorzunehmen, die der Compiler nicht vornehmen kann. Zum Beispiel:</p>
<p>In classA.h wird eine Klasse mit der als <code>inline</code> deklarierten Funktion <code>funcFromA()</code> deklariert.<br />
In classA.cpp steht die Definition der Klasse aus classA.h, inklusive besagter <code>funcFromA()</code><br />
In classB.h wird classA.h inkludiert. Bei jeder Verwendung von <code>funcFromA()</code> in dieser Datei wird das <code>inline</code> geflissentlich ignoriert. Warum? Weil der Compiler an dieser Stelle die Definition nicht kennt.<br />
LTO soll nun diese Definitionen über die Objektdateigrenzen hinaus transportieren, um doch noch ein Inlining zu ermöglichen.</p>
<p>Zweites Beispiel:<br />
Die Klasse A enthält als Member einen Zeiger auf eine Instanz von Klasse B. Muss die Headerdatei mit der Deklaration von Klasse B inkludiert werden? Nein. Eine Vorwärtsdeklaration reicht. Handelt es sich aber nicht um einen Zeiger, sondern eine Instanz, reicht eine Vorwärtsdeklaration nicht.</p>
<p>Zum zweiten Beispiel sei zu sagen, dass es als &quot;schick&quot; gilt, Zeiger auf komplexe Datenstrukturen zu verwenden, die dann nur eine Vorwärtsdeklaration benötigen, und so, vermeintlich, die Kompilierungszeit verringern. Das ist dann Teil des <code>pImpl</code> -Idioms (<strong>P</strong>ointer to <strong>Impl</strong>ementation) und ist ganz supi l33t. Und erzeugt eine Flut von zusätzlicher Tipparbeit, die eine Flut von zusätzlichen potentiellen Fehlern mit sich führt. Ein geschickter Modularer Aufbau der Quelldateien ist meist effizienter um Kompilierungszyklen zu verkürzen. Aber wie bei Allem ist das immer in Relation zum Projekt zu sehen. Eine allgemeingültige Aussage wird es da wohl niemals geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963279</guid><dc:creator><![CDATA[Yamakuzure]]></dc:creator><pubDate>Sat, 09 Oct 2010 12:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 12:49:35 GMT]]></title><description><![CDATA[<p>Yamakuzure schrieb:</p>
<blockquote>
<p>In classA.h wird eine Klasse mit der als <code>inline</code> deklarierten Funktion <code>funcFromA()</code> deklariert.<br />
In classA.cpp steht die Definition der Klasse aus classA.h, inklusive besagter <code>funcFromA()</code><br />
In classB.h wird classA.h inkludiert. Bei jeder Verwendung von <code>funcFromA()</code> in dieser Datei wird das <code>inline</code> geflissentlich ignoriert. Warum? Weil der Compiler an dieser Stelle die Definition nicht kennt.</p>
</blockquote>
<p>Warum soll er die Definition nicht kennen, wenn <code>&quot;classB.h&quot;</code> den Header <code>&quot;classA.h&quot;</code> mit der Inline-Funktion inkludiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963293</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Oct 2010 12:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 13:31:06 GMT]]></title><description><![CDATA[<p>Na ja, er kennt die Funktionsdeklaration aber die Funktionsdefinition ist ja in der .cpp-Datei, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963300</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 09 Oct 2010 13:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 13:35:51 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Na ja, er kennt die Funktionsdeklaration aber die Funktionsdefinition ist ja in der .cpp-Datei, oder?</p>
</blockquote>
<p>Nein, Yamakuzure sprach von einer Inline-Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963302</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Oct 2010 13:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 13:47:14 GMT]]></title><description><![CDATA[<p>Ja, aber er hat trotzdem diese im Header deklariert und in der Quellcodedatei definiert, falls so was geht:</p>
<pre><code class="language-cpp">In classA.h wird eine Klasse mit der als inline deklarierten Funktion funcFromA() deklariert. 
In classA.cpp steht die Definition der Klasse aus classA.h, inklusive besagter funcFromA()
</code></pre>
<p>Ich benutze inline eh nie, daher hab ich keine Ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963309</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 09 Oct 2010 13:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 14:59:25 GMT]]></title><description><![CDATA[<p>Der Witz von <code>inline</code> ist ja gerade, dass du Funktionen im Header <strong>definieren</strong> kannst. <code>inline</code> -Deklarationen sind zwar erlaubt, aber dann muss die Funktionsdefinition in der selben Übersetzungseinheit wie der Aufruf vorhanden sein. Das läuft also darauf hinaus, die Definition im Header anzugeben, wenn man Linkerfehler vermeiden möchte.</p>
<p>Yamakuzure hat sich auch sonst etwas unklar ausgedrückt. Wenn im Header nur die Klassendeklaration steht, kann er dort auch keine Methode deklarieren. Falls er hingegen wirklich die ganze Klasse erst in der .cpp-Datei definiert, kann er deren Methoden nicht in anderen Headern – hier <code>&quot;classB.h&quot;</code> – benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963323</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Oct 2010 14:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 15:52:23 GMT]]></title><description><![CDATA[<p>Yamakuzure schrieb:</p>
<blockquote>
<p>[...] Zum Beispiel:</p>
<p>In classA.h wird eine Klasse mit der als <code>inline</code> deklarierten Funktion <code>funcFromA()</code> deklariert.<br />
In classA.cpp steht die Definition der Klasse aus classA.h, inklusive besagter <code>funcFromA()</code><br />
In classB.h wird classA.h inkludiert. Bei jeder Verwendung von <code>funcFromA()</code> in dieser Datei wird das <code>inline</code> geflissentlich ignoriert.</p>
</blockquote>
<p>Stopp mal. Das ist gar nicht erlaubt. Du darfst in einer Übersetzungeinheit keine Inline-Funktion benutzen, die nur deklariert wurde. Also<br />
ÜE1:</p>
<pre><code class="language-cpp">inline int foo(int);

int bar(int x)
{
  return foo(x*2);
}
</code></pre>
<p>ÜE2:</p>
<pre><code class="language-cpp">inline int foo(int x) {return x;}

int bar(int);

int main()
{
  return bar(0);
}
</code></pre>
<p>ist kein gültiges Programm. Der Compiler wird sich vielleicht nicht beschweren, aber der Linker wird wahrscheinlich meckern; denn in ÜE1 wird die inline-Funktion benutzt aber nur deklariert. In ÜE2 wird sie definiert, aber nie benutzt. Weil die Funktion in ÜE2 nicht benutzt wird und die ODR fordert, dass jede Benutzung eine Definition in derselben ÜE erfordert, darf ein Compiler beim Übersetzen von ÜE2 die Definition der inline-Funktion aussparen. ==&gt; Der Linker wird dann wegen eines unaufgelösten Symbols meckern.</p>
<p>Siehe 3.2/3 [one definition rule]:</p>
<blockquote>
<p>... An inline function shall be defined in every translation unit in which it is used.</p>
</blockquote>
<p>Das Schlüsselwort &quot;inline&quot; wird scheinbar öfters missverstanden. Es ist primär dazu da, einem Compiler, das tatsächliche &quot;Inlining&quot; leichter zu machen, indem in jeder ÜE, in der die Inline-Funktion benutzt wird, auch die entsprechende Definition vorhanden ist (so will es die ODR).</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Der Witz von <code>inline</code> ist ja gerade, dass du Funktionen im Header <strong>definieren</strong> kannst.</p>
</blockquote>
<p>...sogar <strong>definieren musst</strong>. Denn ohne Definition in der aktuellen ÜE darf die Funktion nicht benutzt werden.</p>
<p>Edit: Sorry Nexus. Hatte ich komplett übersehen, dass Du auch darauf aufmerksam gemacht hattest.</p>
<p>Gruß,<br />
kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1963336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963336</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 09 Oct 2010 15:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 15:41:00 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Der Witz von <code>inline</code> ist ja gerade, dass du Funktionen im Header <strong>definieren</strong> kannst.</p>
</blockquote>
<p>...sogar <strong>definieren musst</strong>. Denn ohne Definition in der aktuellen ÜE darf die Funktion nicht benutzt werden.</p>
</blockquote>
<p>Man muss nicht, aber es macht keinen Spaß, in jeder cpp, in der man die Funktion braucht, die Definition zu wiederholen <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/1963342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963342</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 09 Oct 2010 15:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierung durch Klassenunbekanntheit bei Deklaration unterbunden? on Sat, 09 Oct 2010 15:47:18 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Der Witz von <code>inline</code> ist ja gerade, dass du Funktionen im Header <strong>definieren</strong> kannst.</p>
</blockquote>
<p>...sogar <strong>definieren musst</strong>. Denn ohne Definition in der aktuellen ÜE darf die Funktion nicht benutzt werden.</p>
</blockquote>
<p>Man muss nicht, aber es macht keinen Spaß, in jeder cpp, in der man die Funktion braucht, die Definition zu wiederholen <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>...oder einen zweiten Header einzufügen, der dann schließlich die Definition enthält. Das ist natürlich beides eher sinnfrei. Ich hätte für alle anderen Korintenkacker die Aussage noch eingrenzen müssen. <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/1963343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1963343</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 09 Oct 2010 15:47:18 GMT</pubDate></item></channel></rss>