013
20.04.2004, 15:15 Uhr
virtual
Sexiest Bit alive (Operator)
|
Zitat: |
Lumina postete Was haben inline-Funktionen für einen Vorteil ggüb. Makrodefinitionen? Welchen Vorteil haben beide ggüb. "normalen" Funktionen?
|
Vorteile von inline gegenüber Macro:
1. Macros können üble Nebeneffekte haben:
C++: |
#define max(a,b) ((a)>(b)? (a):(b))
int function(int x) { ... }
... a = max(function(1), 0); ...
|
Der Aufruf würde expüandiert zu:
C++: |
a = function(1)>0? function(1):0;
|
Je nach rückgabewert von der Funtion, wird diese also ggf ein zweites Mal aufgerufen. Ein Umstand, den man demM macro nicht ohne weiteres ansieht. Bei einer analogen inline Funktion kann das nicht passieren:
C++: |
inline int max(int a, int b) { return a>b? a:b; }
|
2. Macros sind nichtr typsicher, inline Funktionen hingegen schon.
Vorteile von inline gegenüber normalen Funktionen:
Prmär wird hier angesehen, daß inline Funktionen performanter seien, als die normalen Funktionen, weil kein Overhead für den Funktionsaufruf generiert wird.
Dem gegenüber gibt es aber einige Dinge zu bemerken:
1. Der Compiler darf das inline ignorieren, also stillschweigend eine normale Funktion draus machen (die meisten Compiler machen dies ohnehin bei virtuellen Methoden und Funktionen, die sich rekursiv selbst aufrufen).
2. Inline funktionen müssen im header definiert werden. Formal hat das den Nachteil, daß die Trennung von Implementierung und Interface aufgelöst wird, rein praktisch gesehen hat das den Nachteil, daß dies Abhängigkeiten zwischen Modulen erhöht. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 20.04.2004 um 15:16 Uhr von Pablo editiert. |