Namespace in C++
Namespace in C++
Namespace provide the space or area where we can define or declare identifier i.e. variable, method,
classes.
Using namespace, you can define the space or context in which identifiers are defined i.e. variable,
method, classes. In essence, a namespace defines a scope.
Example, you might be writing some code that has a function called xyz() and there is another library
available which is also having same function xyz(). Now the compiler has no way of knowing which version
of xyz() function you are referring to within your code.
A namespace is designed to overcome this difficulty and is used as additional information to differentiate
similar functions, classes, variables etc. with the same name available in different libraries.
The best example of namespace scope is the C++ standard library (std) where all the classes, methods
and templates are declared. Hence while writing a C++ program we usually include the directive
Defining a Namespace:
A namespace definition begins with the keyword namespace followed by the namespace name as
follows:
namespace namespace_name {
To call the namespace-enabled version of either function or variable, prepend the namespace name
as follows:
Let us see how namespace scope the entities including variable and functions:
1
#include <iostream>
namespace first_space{
void func(){
namespace second_space{
void func(){
int main ()
first_space : : func();
second_space : : func();
return 0;
If we compile and run above code, this would produce the following result:
Inside first_space
Inside second_space
2
The using directive:
You can also avoid prepending of namespaces with the using namespace directive. This directive tells the
compiler that the subsequent code is making use of names in the specified namespace. The namespace
is thus implied for the following code:
#include <iostream>
namespace first_space{
void func(){
namespace second_space{
void func(){
int main ()
func();
return 0;
If we compile and run above code, this would produce the following result:
Inside first_space
3
The using directive can also be used to refer to a particular item within a namespace. For example, if the
only part of the std namespace that you intend to use is cout, you can refer to it as follows:
using std::cout;
Subsequent code can refer to cout without prepending the namespace, but other items in the std
namespace will still need to be explicit as follows:
#include <iostream>
using std::cout;
int main ()
return 0;
If we compile and run above code, this would produce the following result:
Names introduced in a using directive obey normal scope rules. The name is visible from the point of the
using directive to the end of the scope in which the directive is found. Entities with the same name
defined in an outer scope are hidden.
Nested Namespaces:
Namespaces can be nested where you can define one namespace inside another name space as follows:
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
You can access members of nested namespace by using resultion operators as follows:
4
// to access members of namespace_name2
In the above statements if you are using namespace_name1, then it will make elements of
namespace_name2 available in the scope as follows:
#include <iostream>
namespace first_space{
void func(){
namespace second_space{
void func(){
int main ()
func();
return 0;
5
If we compile and run above code, this would produce the following result:
Inside second_space