Im Buch Effective C++, sah ich die Passage unter:Welche Funktion schreibt C++ und ruft eine leere Klasse auf?
Als Ergebnis, wenn Sie
class Empty{};
es ist im Wesentlichen das gleiche schreiben, als ob Sie das geschrieben hatte:
Der folgende Code bewirkt, dass jede Funktion generiert wird:
Aber nach dem Zerlegen der ausführbaren Datei, die durch das Kompilieren des obigen Codes erstellt wurde, erkannte ich, dass es nicht der Fall ist: Es wird keine Funktion aufgerufen.
Hier ist das Haupt Assembler-Code:
00000000004006cd <main>:
4006cd: 55 push %rbp
4006ce: 48 89 e5 mov %rsp,%rbp
4006d1: b8 00 00 00 00 mov $0x0,%eax
4006d6: 5d pop %rbp
4006d7: c3 retq
Es gibt keine Funktion "Empty" im .text
Segment genannt.
Was ist dann das Verhalten eines Compilers, nachdem wir einen Konstruktor oder eine Zuweisung einer leeren Klasse aufgerufen haben? Erzeugt es einige Funktionen, wie das Buch sagt? Wenn ja, wo werden sie gespeichert?
Haben Sie mit Optimierungen kompiliert? – Rakete1111
Um pedantisch zu sein, ist 'Empty() {...}' nicht ganz * äquivalent zu dem, was der Compiler erzeugt, um das gleiche zu erhalten, was der Compiler erzeugt, müßte man 'Empty() = default;'. Es gibt feine Unterschiede - das gleiche gilt für die anderen Mitglieder. Sehen Sie hier: http://en.cppreference.com/w/cpp/language/default_constructor#Trivial_default_constructor –
ohne irgendwelche Optimierungen – linvoker