In C
, if I use #include "someFile.h"
, the preprocessor does a textual import, meaning that the contents of someFile.h
are "copy and pasted" onto the #include
line. In C++
, there is the using
directive. Does this work in a similar way to the #include
, ie: a textual import of the namespace?
using namespace std; // are the contents of std physically inserted on this line?
If this is not the case, then how is the using
directive implemented`.
The using namespace X
will simply tell the compiler "when looking to find a name, look in X as well as the current namespace". It does not "import" anything. There are a lot of different ways you could actually implement this in a compiler, but the effect is "all the symbols in X appear as if they are available in the current namespace".
Or put another way, it would appear as if the compiler adds X::
in front of symbols when searching for symbols (as well as searching for the name itself without namespace).
[It gets rather complicated, and I generally avoid it, if you have a symbol X::a
and local value a
, or you use using namespace Y
as well, and there is a further symbol Y::a
. I'm sure the C++ standard DOES say which is used, but it's VERY easy to confuse yourself and others by using such constructs.]
In general, I use explicit namespace qualifiers on "everything", so I rarely use using namespace ...
at all in my own code.