Wozu "inline"?
-
Hallo!
Wozu dient das Schlüsselwort "inline"? So wie ich das verstenden hab kann man Methoden von Klassen in der klasse (implizit) oder außerhalb (explizit) deklarieren; wenn ich das richtig verstanden habe sollte mein bei einer expliziten Deklarierung vor die mthoden inline schreiben. aber warum? Bei mir geht's auch ohne? Wozu brauch man das oder verstaeh ich das noch net so richtig mit dem inline?
no|one
-
Man benutzt inline bei "kurzen" Funktionen, die, wenn inline deklariert, in den Code, beim Aufruf der Funktion eingefügt, anstatt aufgerufen werden.
Alle Funktionen, die innerhalb einer Klasse definiert werden sind inline.mfg
Glamdring
-
Das Schlüsselwort "inline" erfüllt zwei Aufgaben:
1. Es erlaubt dir die Funktion in mehreren Übersetzungseinheiten (cpp-Dateien) zu definieren. Der Funktions-Rumpf muss dafür natürlich immer derselbe sein.
2. Es ist ein Vorschlag an den Compiler, für diese Funktion inline-Code und damit keinen Funktionsaufruf zu erzeugen. Die endgültige Entscheidung, ob die Funktion inline generiert wird, liegt aber beim Compiler.
-
hier mal ein Beispiel, warum man inline bei nicht-Membern benutzen muss
//demo1.hpp int myabs(int a) { return a<0?-a:a; } void blub(int c); //demo1.cpp #include "demo1.hpp" #include <iostream> void blub(int c) { std::cout << myabs(c) << '\n'; } //demo1main.cpp #include "demo1.hpp" int main() { blub(-10); }
> g++ -Wall -W -std=c++98 -c demo1.cpp > g++ -Wall -W -std=c++98 demo1.o demo1main.cpp /tmp/ccYVXD8f.o(.text+0x0): In function `myabs(int)': : multiple definition of `myabs(int)' demo1.o(.text+0x0): first defined here collect2: ld returned 1 exit status >
siehst du, wenn du kein inline angibst, dann meldet der Linker Probleme!