Wann inline benutzen?
-
Da durch das Schlüsselwort inline das Programm beschleunigt wird sollte man es doch immer schreiben oder? Der Compiler sucht sich ja aus ob das brauchbar ist oder nicht. Deshalb frag ich wann man es verwenden soll. In meinem Buch wird das nicht eindeutig erklärt wann inline und wann nicht.
-
inline brauchst du eigentlich nur bei globalen Funktionen (und die hat man ja selten). Bei Klassenfunktionen brauchst du das Schlüsselwort nicht.
-
Inline lohnt sich bei kleinen Funktionen (die werden dann einfach an die Stelle kopiert wo sie aufgerufen werden), dass ganze kann aber auch deine exe aufblähen
-
das heisst alles was klein und fein ist und vor allem oft gebraucht wird wird inline gemacht
-
vertraue deinem compiler und lass ihn werkeln. inline explizit hinschreiben tut man selten.
manchmal ist es ganz nützlich für sowas://foo.cpp void foo () { } //bar.cpp void foo () { }
das zusammenzulinken wird dir kaum gelingen.
wenn foo allerdings inline wäre - kein problem.
-
davie schrieb:
manchmal ist es ganz nützlich für sowas:
//foo.cpp void foo () { } //bar.cpp void foo () { }
das zusammenzulinken wird dir kaum gelingen.
wenn foo allerdings inline wäre - kein problem.Verstehe ich nicht. Das sind doch zwei Funktionen in verschiedenen Einheiten. Was wäre jetzt mit inline besonders?
-
Da hat die FAQ anscheinend Nachholbedarf. Gibts da schon einen passenden Text zu, oder soll ich einen schreiben?
-
Nicht, dass ich wüsste, Bashar.
Habe ein wenig gegoogelt und weiß jetzt, was du meinst.
-
Inline ist z.B. sinnvoll, wenn eine Funktion nichts anderes macht als eine Membervariable der Klasse zurückgeben.
In normalen Programmen egal, bei der Spieleprogrammierung kann das aber wichtig sein.Aber wie davie gesagt hat: Sofern du einen Compiler hast der optimiert (das tun praktisch alle, eine Ausnahme ist der Compiler der Visual C++ 6 Autorenversion), müsste der das für dich machen.
-
das ist genau der den ich habe
-
Ist doch völlig wurscht.
Wenn du unbedingt so geil drauf bist, dann update ihn mit Visual C++ Toolkit 2003.
-
ich hatte da auch nachholbedarf bezüglich inline..wartet auf Bashars faq-text und höret und staunet
-
man lernt doch nie aus.
-
Bashar schrieb:
Da hat die FAQ anscheinend Nachholbedarf. Gibts da schon einen passenden Text zu, oder soll ich einen schreiben?
Wäre schön wenn du was dazu schreibst.
Ich habe hier zwar auch noch einen 7-Seiten Draft-Text zum Thema rumliegen, aber der wird sowieso nie fertig (liegt schon seit fast einem Jahr auf meiner Festplatte rum).
-
Facer schrieb:
das heisst alles was klein und fein ist und vor allem oft gebraucht wird wird inline gemacht
war's nicht so dass der compiler stillschweigend nicht 'inlined' wenn's ihm nicht in den kram passt? man kann auch ein #define nehmen. das wird immer 'ge-inlined'. templates ja auch.
-
Wenn der Compiler sich deinem inline widersetzt, dann weiß er schon, warum. Es ist sicher keine Alternative ein Makro zu nehmen.
-
Optimizer schrieb:
Wenn der Compiler sich deinem inline widersetzt, dann weiß er schon, warum.
das kann er ja schon ablehnen wenn die signatur bzw. parameterliste usw. ihm nicht passen, unabhängig vom 'body' der funktion. oder sehe ich das falsch?
-
Ich meine keine Compilerfehler, sondern, dass er eine Funktion nicht inlined, wovon du ja geredet hast.
-
In Effektiv C++ programmieren von Scott Meyers steht ein guter Text über inline und seine Gefahren (Richtlinie 33). Dort wird auch gesagt, dass alle Funktionen, die der Compiler als nicht inline akzeptiert, automatisch static werden. (Sie sind nur in der einen ÜE verfügbar). Das ist auch der Grund, warum man Templatemethoden in der Header als inline definiert, so dass es keine doppelte Definitionen der Methoden gibt. (Schlussendlich ein Linker-Fehler) Dass die Methoden als static deklariert wurden, hat natürlich auch seine Nachteile. Das liest man aber am besten bei Interesse im Buch selber nach.
-
ChrissiB schrieb:
In Effektiv C++ programmieren von Scott Meyers steht ein guter Text über inline und seine Gefahren (Richtlinie 33). Dort wird auch gesagt, dass alle Funktionen, die der Compiler als nicht inline akzeptiert, automatisch static werden.
Das ist käse. inline-Funktionen sind, sofern nicht anders deklariert, extern, haben also external-linkage. Es ist Aufgabe des Compilers dafür zu sorgen, dass es nur genau eine Instanz der Funktion gibt, falls die inline-Funktion nicht inline generiert wird oder deren Adresse gebildet wird.
Wenn Meyers das dort wirklich so schreibt, dann gilt das nur für Prä-Standard-C++ nicht aber für das C++ was wir kennen.