117 votes

C ++: Namespaces - Comment utiliser correctement dans les fichiers d'en-tête et les fichiers source?

Envisager une paire de deux fichiers source: une interface fichier de déclaration (*.h ou *.hpp) et son fichier d'implémentation (*.cpp).

Laissez l' *.h fichier comme suit:

namespace MyNamespace {
  class MyClass {
  public:
    int foo();
  };
}

J'ai vu deux types de pratiques pour l'utilisation des espaces de noms dans les fichiers sources:

*.cpp montrant pratique #1:

#include "MyClass.h"
using namespace MyNamespace;

int MyClass::foo() { ... }

*.cpp montrant pratique #2:

#include "MyClass.h"
namespace MyNamespace {

  int MyClass::foo() { ... }

}

Ma question: existe-il des différences entre ces deux pratiques et est considéré comme l'un meilleur que l'autre?

86voto

Dan F Points 11380

Du point de vue de la lisibilité du code, il est probablement préférable, à mon avis, d’utiliser la méthode n ° 2 pour cette raison:

Vous pouvez être using plusieurs espaces de noms à la fois, et tout objet ou fonction écrit en dessous de cette ligne peut appartenir à l'un de ces espaces de noms (sauf conflit de noms). Envelopper le fichier entier dans un bloc namespace est plus explicite et vous permet de déclarer également les nouvelles fonctions et variables qui appartiennent à cet espace de noms dans le fichier .cpp

64voto

James Kanze Points 96599

Le plus clair est l'option que vous n'avez pas montrée:

 int MyNamespace::MyClass::foo()
{
    //  ...
}
 

C'est aussi très verbeux; trop pour la plupart des gens. Étant donné que using namespace est un compromis pour les conflits de noms, du moins d'après mon expérience, et doit être évité sauf dans des portées et des lieux très limités, j'utilise généralement votre n ° 2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X