using Declarations, ie:
1 2 3
|
using std::cout;
using std::cin;
using std::end;
|
add names 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, I have always gone with the advice of... prefer Using Declarations to Using Directive but prefer full scope resolution to Using Declarations.
However, recently I read something that suggested that using directives in the function definitions is a better way to go
* as it doesn't hamstring the optimiser when it comes to template specializations.
**
Has anyone read this or something similar (or feel free to have a discussion about it)?
_____________________________________________________
* it was something like that...trying to remember where I read it.
** realy, totaly trying to remember what I read here.