2012-04-08 5 views

Antwort

1

Inline funktioniert wie eine vom Compiler gesteuerte Copy/Paste, die sich ziemlich von einem Pre-Prozessor-Makro unterscheidet: Das Makro wird zwangsweise inline eingefügt, verschmutzt alle Namespaces und Code, wird nicht einfach debuggbar sein und wird auch dann ausgeführt werden, wenn der Compiler es als ineffizient eingestuft hätte.

Indem Sie es als inline markieren, können Sie eine Funktionsdefinition in eine Header-Datei einfügen (d. H. Sie kann in mehrere Kompilierungseinheiten eingefügt werden, ohne dass der Linker sich beschweren muss).

Etwas markieren inline gibt Ihnen keine Garantie, dass es inline sein wird. Es ist nur ein Vorschlag für den Compiler. Manchmal ist das nicht möglich, etwa wenn Sie eine virtuelle Funktion haben oder wenn eine Rekursion involviert ist. Und manchmal wählt der Compiler nur, es nicht zu benutzen.

+0

Können Sie ein Beispiel geben, in dem ein Makro vom Compiler als ineffizient eingestuft wird (wie in Ihrem ersten Absatz erwähnt). –

+0

Makros sind "inline", bevor die Kompilierung stattfindet, dh die Quellen werden wie in den Makros geändert und dann kompiliert. –

+0

Wenn Ihr Inline-Code größer wird, könnte dies zu Optimierungen des Paging- und des Paketinhaltes durch den Compiler führen. – IndieProgrammer

1

Inline-Funktionen sind nützlich, wenn Ihre Funktion zu häufig aufgerufen wird und klein genug ist, um in einen zwischengespeicherten Speicher zu passen. Sie können es auch manuell tun.

+0

Also, wenn die Funktion nicht zu häufig verwendet wird & ist nicht sehr groß manuelle Inline entspricht Compiler Inline? –

+0

Manuelles Inlining und automatisches Inlining ist dasselbe in der Leistungsart. Der einzige Unterschied ist, dass der Compiler das für Sie tun und alle Ihre geeigneten Funktionen überprüfen kann, oder Sie können es selbst tun, wenn Sie wissen, was Sie tun und den Compiler an Inline weiterleiten einige kritische und geeignete Funktionen. –