Heim > Backend-Entwicklung > C++ > Sind virtuelle Inline-Funktionen ein Mythos oder werden sie einfach missverstanden?

Sind virtuelle Inline-Funktionen ein Mythos oder werden sie einfach missverstanden?

Patricia Arquette
Freigeben: 2024-12-27 06:39:14
Original
170 Leute haben es durchsucht

Are Inline Virtual Functions a Myth, or Just Misunderstood?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage