Inline-Funktionen sind Funktionen, bei denen der Compiler (aber nicht verpflichtet) den Aufruf durch das direkte Einfügen des Funktion Codes an der Stelle des Aufrufs ersetzen kann. Dafür wird das Schlüsselwort inline verwendet.
inline gibt dem Compiler einen Hinweis, aber keine Verpflichtung: Es kann ignoriert werden, wenn die Funktion zu komplex ist.Einschränkungen und Risiken:
Beispiel:
inline int add(int a, int b) { return a + b; } struct X { int get() const { return value; } int value; }; // get() wird als inline betrachtet
Frage: Garantiert das Schlüsselwort inline, dass die Funktion an allen Aufrufstellen eingebaut wird?
Antwort: Nein. Der Compiler entscheidet selbst, ob die Funktion inline eingesetzt wird, basierend auf internen Heuristiken. inline ist nur eine Empfehlung.
Geschichte
In einem Finanzsystem wurde ein oft verwendeter Logger mit Dutzenden großer Inline-Funktionen geschrieben. Nach dem Wachstum des Systems vergrößerte sich die Größe des Binaries erheblich, was zu längeren Linkzeiten und einer verringerten Cache-Effizienz auf dem Server führte.
Geschichte
Bei der Migration von plattformübergreifender Software wurde festgestellt, dass einige Compiler (zum Beispiel MSVC und GCC) inline unterschiedlich behandeln: Ein Teil der Funktionen wurde nicht inline umgesetzt, während ein anderer Teil es bereits tat, was schwer reproduzierbare Unterschiede in Geschwindigkeit und Größe der Anwendungen zwischen den Plattformen verursachte.
Geschichte
Ein Entwickler erklärte Inline-Funktionen nur in der Header-Datei, aber die Implementierung wurde in eine separate cpp-Datei ausgelagert. Infolgedessen traten beim Linken Fehler wegen mehrfacher Definitionen oder ungelöster externen Symbole auf, da Inline-Funktionen genau in den Headern definiert werden müssen.