Inline Funktionen
-
Wenn ich Methoden direkt im Header implementiere sind diese impliziet inline. Möchte ich allerdings Methoden als inline als Empfehlung an den Compiler geben, welche ich in einer seperaten cpp Datei implementiere, dann muss ich sowohl im HPP als auch im in der CPP Datei vor die Funktion inline schreiben.
Trenne ich inline Funktionen auf eine HPP und CPP Datei auf, dann muss ich beim übersetzen die CPP immer übersetzt zur Verfügung haben. Ist das soweit korrekt?
Gibt es irgendwelche Empfehlungen, ob man vielleicht inline Funktionen immer im Header implementieren sollte, oder ähnliches?
Danke und Frohe Weihnachten! :xmas1:
-
Das problem beim Inline ist immer, dass der Compiler entscheidet ob inline oder nicht, also das heißt das du z.B. die Funktion inline void Bla(); hast und der Compiler einfach sagt, dass die nicht inline ist, dies kann man via einem __forceinline verhindern, aber ich glaube diesen Typen gibt es nur bei den VC++ Compilers.
Ich persönlich schreibe inline Funktionen grundsätztlich in Header Dateien oder bei Mathe Funktionen in *.inl File ob eine bessere übersicht zu haben.
MFG Lars
-
Inliner schrieb:
Wenn ich Methoden direkt im Header implementiere sind diese impliziet inline. Möchte ich allerdings Methoden als inline als Empfehlung an den Compiler geben, welche ich in einer seperaten cpp Datei implementiere, dann muss ich sowohl im HPP als auch im in der CPP Datei vor die Funktion inline schreiben.
inline kommt nur in den Header
Trenne ich inline Funktionen auf eine HPP und CPP Datei auf, dann muss ich beim übersetzen die CPP immer übersetzt zur Verfügung haben. Ist das soweit korrekt?
Wenn du kompilierst & linkst, dann brauchst du _immer_ die Implementation, woher soll der Compiler denn sonst den Code nehmen?? Er kennt über den Header ja nur die Schnittstelle!
Gibt es irgendwelche Empfehlungen, ob man vielleicht inline Funktionen immer im Header implementieren sollte, oder ähnliches?
Wenn ich inline, dann zu 99% gleich im Header, da es sich z.B. nur um wirklich kurze Funktionen wie getter - Methoden usw. handelt.
-
ChrisFehn3 schrieb:
dies kann man via einem __forceinline verhindern, aber ich glaube diesen Typen gibt es nur bei den VC++ Compilers.
Was man allerdings tunlichst vermeiden sollte, denn dann kannst du hingehen und eine Ellenlange Funktion
schreiben, von der du verlangst, dass sie geinlined wird. Und dann blaet sich der Code unnoetig aufGPC schrieb:
Inliner schrieb:
Wenn ich Methoden direkt im Header implementiere sind diese impliziet inline. Möchte ich allerdings Methoden als inline als Empfehlung an den Compiler geben, welche ich in einer seperaten cpp Datei implementiere, dann muss ich sowohl im HPP als auch im in der CPP Datei vor die Funktion inline schreiben.
inline kommt nur in den Header
Per konvention bei dir oder meinst du das allgemein gueltig?
mfg
v R
-
virtuell Realisticer schrieb:
GPC schrieb:
Inliner schrieb:
Wenn ich Methoden direkt im Header implementiere sind diese impliziet inline. Möchte ich allerdings Methoden als inline als Empfehlung an den Compiler geben, welche ich in einer seperaten cpp Datei implementiere, dann muss ich sowohl im HPP als auch im in der CPP Datei vor die Funktion inline schreiben.
inline kommt nur in den Header
Per konvention bei dir oder meinst du das allgemein gueltig?
mfg
v RIch meinte eigentlich nur das Schlüsselwort *g*
Also://foo.hpp struct Foo { inline void bar(); };//foo.cpp #include "foo.hpp" void Foo::bar() { //mach was };Du meintest wohl, dass ich nur im Header inline, und was nicht im Header geninlined werden kann, das wird eben nicht geinlined, oder?
Ich halte das oft so: Wenn schon inline, dann gleich im Header, wenn die Methode im Header zu groß wird, dann überlege ich mir nämlich meistens, ob die Funktion wirklich geinlined werden sollte, oder ob sie nicht schon zu groß ist und ich den Code nur unnötig aufblähe.
-
Ja, da hatte ich dich falsch verstanden. Manchmal, da schreib ich auch Funktionen ausserhalb der Klasse,
die ich, wenn moeglich, geinlined haben will, einfach damit ich in der Header keinen Code stehen habe. Aber
das ist Geschmackssache
mfg
v R