using Declarations, ie:
to the scope in which they are declared. The effect of this is:
» a compilation error occurs if the same name
is declared elsewhere in the same scope;
» if the same name
is declared in an enclosing scope, the the name in the namespace hides it.
The using directive, ie
using namespace std;
, does not add a name
to the current scope, it only makes the names
accesable from it. This means that:
» If a name
is declared within a local scope it hides the name
from the namespace;
» a name
in a namespace hides the same name from an enclosing scope;
» a compilation error occurs if the same name is made visible from multiple namespaces or a name is made visible that hides a name in the global name space.
So, to my mind, using Declarations are better than using directives.