En utilisant-déclaration pour se déplacer à un autre nom namespace?
-
29-09-2019 - |
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 foo
s ou munch
es dans d'autres espaces de noms peut-être?
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.