Pour & Cons de mettre tout le code dans les fichiers d'en-Tête dans le C++?

Vous pouvez la structure d'un programme C++, de sorte que (presque) tout le code réside dans les fichiers d'en-Tête. Essentiellement, il ressemble à un C# ou Java. Cependant, vous avez besoin d'au moins un .cpp fichier à tirer dans tous les fichiers d'en-tête lors de la compilation. Maintenant, je sais que certaines personnes seraient absolument horreur de cette idée. Mais je n'ai pas trouvé de convaincre les inconvénients de cette situation. Je peux énumérer quelques avantages:

[1] plus Rapide temps de compilation. Tous les fichiers d'en-tête seulement obtenir analysée une fois, parce qu'il n'y en a qu'une .fichier cpp. Aussi, un fichier d'en-tête ne peut pas être inclus plus d'une fois, sinon vous obtiendrez un build pause. Il y a d'autres moyens d'atteindre plus rapidement compile lorsque vous utilisez l'autre, mais ce n'est si simple.

[2], Il évite les dépendances circulaires, pour le rendre absolument clair. Si ClassA dans ClassA.h a une dépendance circulaire sur ClassB dans ClassB.h, je dois mettre une référence vers l'avant & ça colle. (Notez que c'est à la différence de C# & Java où le compilateur résout automatiquement les dépendances circulaires. Cela encourage les mauvaises pratiques de codage de l'OMI). Encore une fois, vous pouvez éviter des dépendances circulaires si votre code a été dans .cpp fichiers, mais dans un monde réel projet, .cpp fichiers ont tendance à inclure des en-têtes jusqu'à ce que vous ne pouvez pas comprendre qui dépend pour qui.

Vos pensées?

  • Si vous en faites une politique à long terme déclare autant que possible. Pas seulement un projet composé de beaucoup de .fichier cpp compiler plus vite, mais que vous n'avez jamais à vous soucier des dépendances circulaires. En gros, si vous n'avez pas besoin de toute la définition de l'en-tête, utiliser un déclarer avant.
  • +1 C'est une bonne question, car cette pratique est encore utilisé dans certains gros projets. (www.ogre3D.com par ex.)
  • Point 1 ignore la perspective de l'utilisation de plus d'un noyau/machine pour compiler votre projet. La distribution des compilations de plusieurs fichiers cpp multiples cœurs peut battre la compilation du programme comme un seul fichier cpp être compilé sur un seul core.
  • Quid des performances ? Ne peut pas le compilateur prendre de meilleures optimisations si elle voit tout le code en une seule fois ? (par exemple, l'in-lining, etc..)
InformationsquelleAutor user15071 | 2008-10-11