Wird das letzte für die Optimierung in C++ verwendet?
Es kann sein, und ist.
Wie bereits erwähnt, wird es bereits verwendet; see here und here zeigt den generierten Code für die Überschreibung mit und ohne final
.
An optimisation along these lines würde sich auf die "De-Virtualisierung" der virtuellen Aufrufe beziehen. Dies ist nicht immer sofort von der final
der Klasse oder Methode betroffen. Obwohl sie Hilfe bieten, um dies zu bestimmen, gelten die normalen Regeln der virtuellen Funktionen und der Klassenhierarchie. Wenn der Compiler bestimmen kann, dass eine bestimmte Methode zur Laufzeit immer aufgerufen wird (z. B. bei einem OP-Beispiel mit einem automatischen Objekt), könnte sie an optimisation anyway anwenden, unabhängig davon, ob die Methode final
ist oder nicht.
Optimierungen fallen unter die as-if rule, die es dem Compiler erlauben, jede Transformation anzuwenden, solange das beobachtbare Verhalten so ist, als wenn der ursprüngliche Code ausgeführt worden wäre.
die Frage behoben – tmlen
'Klasse C: Scham A {void f() überschreiben; }; ' –
' new A() 'ist schlecht gebildet, weil' A' abstrakt ist. –