2013-03-04 11 views
6

Ich habe in letzter Zeit viel gelesen, und während ich die Vererbung (und virtuelle Funktionen) behandle, stolpere ich immer über das Inline-Schlüsselwort. Jetzt weiß ich, was Inline im normalen Sinn ist - Compiler kann Funktionsaufrufe durch den genauen Code ersetzen. Wie oft ich es jedoch in Bezug auf die Vererbung erwähnt habe - gibt es einen besonderen Grund für die Verwendung von Inline innerhalb der Vererbung? Ich verstehe nicht, warum es weiter erwähnt wird ....Vererbung und Inline?

Welche zusätzliche Rolle hat eine Inline-Funktion innerhalb der Vererbung/abgeleiteten Klassen/virtuellen Funktionen?

+0

@BillyONeal Ich denke nicht, dass Link wirklich erklärt, was genau die Verbindung ist (wenn es eine gibt). – user997112

+1

Noch einmal .... das ist kein Duplikat. Ich frage, was ist der Link ..... diese Frage fragt, ob das Inline-Setzen auf eine virtuelle Funktion sinnlos ist .... Es ist einfach für jemanden, der die Antwort kennt, eine Frage zu finden, die der Antwort vage ähnelt - aber das tut nicht Ich meine, es ist identisch. Ich kenne die Antwort nicht und das Lesen dieser anderen Frage hat nicht geholfen. – user997112

Antwort

2

Ja, virtuelle Funktionen inline zu verwenden ist Zeitverschwendung. Eine virtuelle Funktion muss über eine virtuelle Funktionstabelle aufgerufen werden, die aus Funktionszeigern besteht. Eine Inline-Funktion kann nicht von einem Zeiger aufgerufen werden. Es muss als eine echte Funktion existieren.

Es gibt einige Ausnahmen. Wo der Aufrufer den genauen Objekttyp kennt, kann er die virtuelle Funktionstabelle vollständig überspringen.

Eine übermäßige Verwendung des virtuellen Schlüsselworts kann zu sehr langsamem Code führen. Wenn der Compiler drei oder vier kleine Funktionsaufrufe inline ausführen und optimieren kann, muss er mit virtuellen Funktionen tatsächliche Funktionsaufrufe ausführen, wobei er keine Annahmen über Speicher oder Registerstatus zwischen Aufrufen macht.