Sind virtuelle Inline-Funktionen wirklich ein Mythos?
Bei einer Codeüberprüfung wirft der Kommentar „Virtuelle Funktionen müssen nicht inline sein“ Fragen auf die Verwendung von virtuellen Inline-Funktionen. Trotz ihrer potenziellen Vorteile bestehen Zweifel an ihrer Praktikabilität.
In Szenarien, in denen Funktionen direkt auf Objekten aufgerufen werden, scheinen virtuelle Inline-Funktionen geeignet zu sein. Allerdings fragt man sich vielleicht, warum virtuelle Funktionen verwendet werden, wenn Objekte für Methodenaufrufe verwendet werden.
Der folgende Codeausschnitt veranschaulicht das Problem:
class Temp { public: virtual ~Temp() {} virtual void myVirtualFunction() const { cout << "Temp::myVirtualFunction" << endl; } }; class TempDerived : public Temp { public: void myVirtualFunction() const { cout << "TempDerived::myVirtualFunction" << endl; } }; int main() { TempDerived aDerivedObj; // Compiler expands virtual functions aDerivedObj.myVirtualFunction(); // Object type for Temp* is known Temp* pTemp = &aDerivedObj; pTemp->myVirtualFunction(); return 0; }
Während der Compiler die virtuelle Funktion einbinden kann aufrufen, wenn die genaue Klasse des Objekts bekannt ist (z. B. aDerivedObj), ist dies nicht möglich, wenn über einen Zeiger auf das Objekt zugegriffen wird (pTemp).
Diese Einschränkung wirft die Frage auf: Sollten virtuelle Inline-Funktionen vermieden werden, da ihre Erweiterung oft eingeschränkt ist?
Die Antwort:
Virtuelle Funktionen können unter bestimmten Umständen eingebunden werden, wie in den C-FAQs beschrieben:
„Ein virtueller Inline-Aufruf kann nur dann eingebunden werden, wenn Der Compiler kennt die „genaue Klasse“ des Objekts, das das Ziel des virtuellen Funktionsaufrufs ist. Dies kann nur passieren, wenn der Compiler ein tatsächliches Objekt und keinen Zeiger oder Verweis auf ein Objekt hat
Das obige ist der detaillierte Inhalt vonSind virtuelle Inline-Funktionen ein Mythos oder werden sie einfach missverstanden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!