C++-Programmierung/ Im Zusammenhang mit Klassen/ Wir empfehlen inline
Aus Wikibooks
In den Kapiteln über Funktionen und Headerdateien haben Sie bereits einiges über inline-Funktionen erfahren. An dieser Stelle soll dieses Wissen nun auf den Gebrauch von inline-Klassenmethoden übertragen werden. Das folgende kleine Beispiel zeigt einer Klasse mit einer inline-Methode.
public:
int methode()const;
private:
int m_a;
};
inline int A::methode()const{
return m_a;
}
Das Schlüsselwort inline steht vor der Methodendefinition. In der Deklaration würde es zwar keinen Compilierfehler produzieren, aber es würde, je nach Compiler, nur auf Verwendungen dieser Methode in der gleichen Implementierungsdatei Auswirkungen haben. Damit der Compiler den Methodenaufruf auch durch den Methodenrumpf ersetzen kann, steht die Methodendefinition ebenso die Klassendefinition in der Headerdatei und nicht in einer eventuell zugehörigen Implementierungsdatei. Diese Vorgehensweise ist nur sinnvoll, wenn die Methode sich später in der gleichen Binärdatei befindet. Wollen Sie sicherstellen, dass eine bestimmte Methode immer die Chance hat, inline verwendet zu werden, nehmen Sie folgendes Verfahren:
Wenn Sie eine Funktion direkt innerhalb einer Klassendefinition definieren, ist sie implizit inline, da solche Funktion nahezu immer sehr kurz sind und sich somit gut zum Inlinen eignen.
public:
// methode ist implizit inline
int methode()const { return m_a; }
private:
int m_a;
};
Moderne Compilersuiten sorgen je nach Einstellungen sowieso dafür, dass Methoden inline verwendet werden, auch wenn sie nicht als Inline deklariert wurden! Die meisten dieser Suiten ermöglichen Ihnen, auch die Inline-Verwendung durch weitere Schlüsselwörter wahrscheinlicher zu machen. Da die Inline-Verwendung eine freiwillige und willkürliche Entscheidung des Compilers ist und Einfluss auf das Laufzeitverhalten nimmt, sollte man nur in wenigen Fällen darauf Rücksicht nehmen. Diese Fälle sind nicht Inhalt dieses Buchs und wer denkt, dass er/sie schlauer als der verwendete Compiler/Linker ist, braucht dieses Buch auch nicht zu lesen.