Angenommen, ich habe eine Klasse wie folgt aus:Virtuelle Methoden Optimierung
class MyClass{
int somedata;
public:
virtual void DoSomething() { /*do something here*/}
};
Und dann habe ich nie von dieser Klasse ableiten je. Ich merke, dass, wenn der Compiler gerade die Assembly genau so schreibt, wie der Code geschrieben wird, jede einzelne MyClass
Instanz eine zusätzliche Datengröße wegen der virtuellen Funktion hat.
So ist es standardkonform für den Optimierer Optimieren Sie die Klasse etwas wie folgt:
class MyClass{
int somedata;
public:
void DoSomething() { /*do something here*/} //Note absence of virtual
};
Wenn es eine standardkonforme Optimierung ist, macht das überhaupt ein Compiler?
Können Sie ein konformes Programm schreiben, das den Unterschied erkennen kann? –
@PeteBecker Vielleicht, wenn ich ein Array von 'MyClass's hatte und dann einen' void' Zeiger für den Zugriff auf Mitglieder verwendete ... aber das ist ziemlich extrem ... – DarthRubik
Sie können nicht auf Mitglieder durch einen 'void' Zeiger in zugreifen ein konformes Programm. –