Strafe für "inlined" Klassen

8

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

    
kirbo 07.04.2010, 19:36
quelle

7 Antworten

8
  

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.

    
sbi 07.04.2010 19:41
quelle
2

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.

    
Jerry Coffin 07.04.2010 19:42
quelle
1

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.

    
Nemanja Trifunovic 07.04.2010 19:49
quelle
1

Es gibt noch eine andere mögliche Strafe: Leistung. Wenn Sie zu viele Funktionen inline ausführen, führt dies zu einem Code Bloat, der zu ausführbaren Dateien führt, deren Funktionen und Schleifen möglicherweise nicht in den Befehlscache der Ziel-CPU passen.

    
struppi 07.04.2010 20:10
quelle
0

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.

    
Martin York 07.04.2010 19:39
quelle
0

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.

    
Akanksh 07.04.2010 19:43
quelle
0

Es gibt zwei "Strafen"

  • Einer wird zur Kompilierzeit bewertet. Wenn Sie ein ungewöhnlich großes Projekt haben, werden Sie viele Header-Dateien haben, die der Präprozessor mit viel mehr Code ineinander erweitern wird. Wenn Sie eine .h-Datei ändern, wird in allen Dateien, die sie enthalten, eine Neukompilierung ausgelöst.
  • Das andere ist, dass es (möglicherweise) zu größeren Binärdateien führt, weil dieser Code in anderen Objektdateien repliziert wird.
Stephen 07.04.2010 19:44
quelle

Tags und Links