Methode inline setzen
-
Hallo,
zwei Fragen hätte ich bzgl. inline-Methoden:
1. Wann genau setze ich eine Funktion inline?
2. Muss ich das überhaupt machen, oder übernehmen moderne Compiler (speziell der in VS2005) das für einen?Dank und Gruß: mbu.
-
1: Eine Methode ist inline, wenn du das entweder implizit bei der Definition angibst (m1 im unteren Beispiel) oder sie direkt in der Klassendefinition definiert wird (m2):
class test { public: int m1(); int m2() { return 4711; } }; inline int test::m1() { return 0x0815; }2: inline ist nur ein Hinweis an den Compiler - die meisten sind inzwischen recht gut darin, selber auszuwählen, was sie inlinen können.
-
Hi,
wenn ich mich recht entsinne, darf ein Compiler zu Optimierungszwecken auch Funktionen inlinen, die nicht also solches gekennzeichnet sind (sei es explizit oder implizit).
Stimmt das ?
Gruß,
Simon2.
-
Wo wir grad bei dem Thema sind... Ich bekomme immer Linkerfehler wenn ich einige Funktionen als inline in der .cpp Dateien deklariere.
In der MSDN steht dazu nur das dieser Linkerfehler auftreten kann wenn man Funktionen in der *.cpp als inline deklariert. Gibt es da einen Trick wie man diesen Fehler beheben kann? Ich benutze den Visual C++ 6.0
-
Chris++ schrieb:
Wo wir grad bei dem Thema sind... Ich bekomme immer Linkerfehler wenn ich einige Funktionen als inline in der .cpp Dateien deklariere.
meinst du: du hast einen header mit dem interface und eine .cpp-datei mit dem code. das kann nicht gehen, da der compiler nicht immer wissen kann, was die inline-funktion bedeutet und sie so nicht durch ihren inhalt ersetzen kann, daher sind forward-deklarationen von inline-funktionen generell nicht möglich.
-
jo, schreib den krempel in die header-datei

-
Simon2 schrieb:
wenn ich mich recht entsinne, darf ein Compiler zu Optimierungszwecken auch Funktionen inlinen, die nicht also solches gekennzeichnet sind (sei es explizit oder implizit).
Stimmt das ?
Jup. Er darf jede nicht-inline Funktion inlinen und für jede inline-Funktion eine "out-of-line" Definition verwenden.
Ich bekomme immer Linkerfehler wenn ich einige Funktionen als inline in der .cpp Dateien deklariere.
Wichtig ist, wo du sie *definierst*. Die Definition einer inline-Funktion muss überall dort, wo sie aufgerufen wird, sichtbar sein.
-
Danke,
Simon2.
-
Ich hab glaub ich in dem Buch hier gelesen, das inline in der cpp stehen muss.
-
Chris++ schrieb:
Ich hab glaub ich in dem Buch hier gelesen, das inline in der cpp stehen muss.
Was sagt uns das jetzt?

Der Grund, warum inline Funktionen dort sichtbar sein müssen wo sie aufgerufen werden, steht bereits in diesem Thread. Wenn sie nur innerhalb einer cpp-Datei benutzt werden, kannst Du die inline-Funktionsrümpfe natürlich gerne in diese eine cpp-Datei setzen. Aber das ändert nichts an der technischen Begründung...