2010-11-06 3 views
1

Étant donné:Utilisation de la déclaration pour déplacer le nom vers un autre espace de nom?

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 assez clair que (a) duplique le code qui ne devrait jamais être une bonne idée. La question est plus sur la résolution de surcharge etc ... et s'il y a d'autres foo s ou munch es dans d'autres espaces de noms?

+0

"en utilisant One :: foo;" est appelé une déclaration d'utilisation; une directive using est "using namespace N;". –

Répondre

1

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

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

Ce serait rarement question; une plus grande préoccupation est la duplication de la logique.

0

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

Questions connexes