<?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 Methode]]></title><description><![CDATA[<p>Hallo,<br />
sehe ich das richtig, dass wenn ich die Methoden in der Klasse Deklariere und Definiere sie dann als inline Interpretiert werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262757/inline-methode</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 11:05:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262757.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Mar 2010 21:11:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 21:11:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
sehe ich das richtig, dass wenn ich die Methoden in der Klasse Deklariere und Definiere sie dann als inline Interpretiert werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867215</guid><dc:creator><![CDATA[Noob12345]]></dc:creator><pubDate>Wed, 10 Mar 2010 21:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 21:14:08 GMT]]></title><description><![CDATA[<p>Das ist eine implizite Anfrage nach inline. Was der Compiler draus macht kannst du eh nicht entscheiden (außer, dein compiler hat besondere Features dafür)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867216</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Wed, 10 Mar 2010 21:14:08 GMT</pubDate></item><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 21:26:06 GMT]]></title><description><![CDATA[<p>Für den Linker spielt es allerdings eine Rolle. Wenn du eine Methode innerhalb der Klassendefinition definierst, läuft das aufs Gleiche hinaus wie eine Definition ausserhalb der Klasse, aber im gleichen Header und mit dem Schlüsselwort <code>inline</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867221</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Mar 2010 21:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 21:30:01 GMT]]></title><description><![CDATA[<p>Ja das meinte ich. Ist Inline in der Heutigen zeit überhaupt noch sinnvoll, also das explizit zu definieren? Oder macht das der Compiler so und so bei kurzen Methoden/Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867222</guid><dc:creator><![CDATA[Noob12345]]></dc:creator><pubDate>Wed, 10 Mar 2010 21:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 23:15:19 GMT]]></title><description><![CDATA[<p>Noob12345 schrieb:</p>
<blockquote>
<p>Ja das meinte ich. Ist Inline in der Heutigen zeit überhaupt noch sinnvoll, also das explizit zu definieren? Oder macht das der Compiler so und so bei kurzen Methoden/Funktionen?</p>
</blockquote>
<p>Das steht in der Dokumentation deines Compilers. Die Compilern die ich benutze (gcc, intel), machen das automatisch auf den höheren Optimierungsstufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867252</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 10 Mar 2010 23:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to Inline Methode on Wed, 10 Mar 2010 23:27:49 GMT]]></title><description><![CDATA[<p>Noob12345 schrieb:</p>
<blockquote>
<p>Ja das meinte ich. Ist Inline in der Heutigen zeit überhaupt noch sinnvoll, also das explizit zu definieren?</p>
</blockquote>
<p>Sicher. Wie Nexus sagt, spielt es für den Linker eine besondere Rolle. Probiere mal das hier:</p>
<p>a.cpp</p>
<pre><code>inline int foo() {return 0;}

int main() {
  return foo();
}
</code></pre>
<p>b.cpp</p>
<pre><code>inline int foo() {return 0;}
</code></pre>
<p>Beides kompilieren und Linken ---&gt; kein Problem. Lässt Du das <code>inline</code> weg, wird sich mit hoher Wahrscheinlichkeit Dein Linker beschweren, dass die Funktion <code>foo</code> mehrfach definiert wurde.</p>
<p>Inline erlaubt Dir also eine Mehrfachdefinition (immer noch höchstens eine Definition pro Übersetzungseinheit aber ein und dieselbe Def darf in mehreren ÜEs auftauchen). Funktionen, die in der Klasse definiert werden, sind implizit inline -- können daher auch &quot;mehrfach definiert&quot; werden. Und das passiert ja auch, wenn man so eine Klasse in eine Header-Datei schreibt und die in mehreren Übersetzungseinheiten einbindet.</p>
<p>Warum die ODR (&quot;one definition rule&quot;) für Inline-Funktionen so eine Ausnahme macht, sollte auch klar sein. Ein Compiler, der die Funktion &quot;inlinen&quot; wollen würde, müsste sonst erstmal die Implementierung finden. Da ist es einfacher, die Implementierung der Inline-Funktion in jeder Übersetzungseinheit einzubauen, in der die Funktion genutzt wird.</p>
<p>Wenn normale Funktionen, die in anderen Übersetzungeinheiten definiert werden, &quot;geinlined&quot; werden sollen, dann ist das erstmal gar nicht so einfach. Eine Technik, die das erlaubt ist LTO, Link-Time-Optimization. Das bieten aber die wenigsten Tool-Chains an und erfordert zumindest beim GCC extra Arbeit (muss per Schalter aktiviert werden, wenn ich mich nicht irre. Die Objekt-Dateien werden dann auch größer, weil der &quot;Zwischencode&quot; da noch drin ist. Ich halte aber für diese Aussagen meine Hand nicht ins Feuer).</p>
<p>Fazit: Wenn &quot;geinlined&quot; werden soll, ist es am einfachsten dieselbe zu &quot;inlinende&quot; Funktion in mehreren ÜEs zu definieren. Damit es keinen Linker-Fehler gibt, muss das Schlüsselwort Inline verwendet werden oder die Funktion in einer Klasse implementiert werden. Das klappt dann auch wegen der Ausnahme für Inlinefunktionen in der ODR. Dies trifft übrigens auch für Definitionen von Funbktionstemplates zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867259</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 10 Mar 2010 23:27:49 GMT</pubDate></item></channel></rss>