Question

Vu:

namespace One {
  void foo(int x) {
    munch(x + 1);
  }
};

namespace Two {
  // ... see later
}

...
void somewhere() {
  using namespace Two;
  foo(42);
  ...

est-il une différence entre les deux variantes suivantes:

a)

namespace Two {
  void foo(int x) {
    munch(x + 1);
  }
};

et b)

namespace Two {
  using One::foo;
};

EDIT: Il est clair assez que (a) fait double emploi avec le code qui ne devrait jamais être une bonne idée. La question est plus sur la résolution de surcharge etc ... s'il y a d'autres foos ou munches dans d'autres espaces de noms peut-être?

Était-ce utile?

La solution

Avec, ils sont des fonctions réellement différentes, mais avec b, les deux fonctions sont identiques:

assert(&One::foo == &Two::foo);

Ce serait rarement la matière; une plus grande préoccupation dédouble la logique.

Autres conseils

En ce qui concerne l'utilisation, ils sont équivalents. En ce qui concerne le code, en cas a) vous dupliquer le code fonction foo(). Autrement dit, les deux versions mettront à la disposition de la fonction foo() intérieur Two, mais a) cas génère le code pour foo deux fois, parce que le compilateur n'a aucun indice à le découvrir est la même fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top