It is not quite as simplistic as the comments suggest.
Here is an explanation of
using Declarations and
using directive:
using Declarations, ie:
1 2 3
|
using std::cout;
using std::cin;
using std::endl
|
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.
Global scope resolution (::
Name) tells the compiler to look for the name at global scope rather than local or any other. If you have used a
using directive in the global scope all the names are accessible via that scope.
full scope resolutions (
namspace::
name) tells the compiler exactly where to look.