Visual Studio erlaubt es Ihnen, "inlined" Klassen zu erstellen (wenn ich nicht mit dem Namen verwechselt werde). Also Klassenheader und Implementierung in einer Datei.
H. Datei enthält Definitionen und Deklarationen der Klasse und Funktionen, es gibt überhaupt keine .cpp-Datei.
Ich habe mich also gefragt, ob es dafür eine Strafe gibt? irgendwelche Nachteile?
Vielen Dank
irgendeine Strafe, um es so zu machen? irgendwelche Nachteile?
Ja. Wenn Sie die Implementierung der Klasse ändern müssen, da sich diese in einer Headerdatei befindet, müssen alle Benutzer der Klasse neu kompiliert werden, obwohl sie sich nur mit der Schnittstelle . Bei einigen Projekten kann dies sehr teuer sein.
Sie können die vollständige Implementierung einer Klasse in den Header mit einem beliebigen Compiler einfügen. Normalerweise gibt es eine Zeitkomprimierung in Bezug auf die Kompilierzeit - der Header wird separat für jede Quelldatei kompiliert, die ihn enthält.
Es kann auch eine Strafe in Bezug auf Code Bloat geben - das Setzen der Funktionsdefinitionen innerhalb der Klassendefinition deklariert sie implizit als Inline, so dass es eine erhöhte Wahrscheinlichkeit gibt, dass der Compiler für jeden einzelnen Code Code generiert anstatt zu generieren Code an einem Ort, und generieren Sie Anrufe an anderer Stelle.
Eine ziemlich schlechte Idee, wenn Sie mich fragen, besonders für große Projekte. Werfen Sie einen Blick auf Lakos "Large-Scale C ++ Software Design", um mehr über die Nachteile eines solchen Ansatzes zu erfahren.
Keine Strafe.
Aber es bedeutet auch nicht, dass der Code tatsächlich inline ist.
Das Inline-Schlüsselwort ist nur ein Compier-Hinweis, der normalerweise ignoriert wird, da der Compiler in der Regel viel schlauer ist als der Entwickler, wenn es darum geht, wann Code inline zu schreiben ist.
Das Inline-Schlüsselwort ist nur ein Hinweis für den Compiler zum Inline-Code. Visual Studio verfügt über einen __forceinline-Bezeichner für Funktionen, bei denen der Compiler die Funktion ohne eine Kosten-Nutzen-Analyse zwangsweise inline einfügt.
Über __forceinline: Ссылка
Die * .h-Datei mit allen Definitionen und Deklarationen sollte keinen Unterschied machen, außer für die Kompilierzeiten für große Dateien.
Es gibt zwei "Strafen"
Tags und Links class c++ visual-studio