Les espaces de noms sont un moyen important d'organiser le code.
Deux fonctions peuvent avoir un conflit de noms, que l'on peut résoudre en les plaçant dans des espaces de noms différents.
Les espaces de noms peuvent être imbriqués, ce qui peut aider à structurer de grandes bases de code.
On accède aux espaces de noms via l'opérateur de résolution de portée ::.
L'exemple ci-dessous montre l'utilisation de deux fonctions foo différentes.
Elles sont utilisées ensemble en préfixant leur espace de noms respectif.
namespace my_ns {
int foo() {
return 44;
}
namespace my_inner_ns {
int baz() {
return 90;
}
}
}
namespace my_other_ns {
int foo() {
return -2;
}
}
int myresult{my_ns::foo() + my_other_ns::foo() * my_ns::my_inner_ns::baz()};
Des espaces de noms imbriqués trop profondément peuvent être trop verbeux.
Il est possible de supprimer cette verbosité en important un espace de noms avec using.
Cela déplace tous les noms dans l'espace de noms global.
Pour conserver une certaine distinction, des alias peuvent être utiles.
int my_other_result{my_ns::my_inner_ns::baz()};
using namespace my_ns::my_inner_ns; // importing the complete namespace
int also_other_result{baz()};
namespace m = my_ns; // setting an alias
namespace o = my_other_ns;
int also_my_result{m::foo() + o::foo() * m::my_inner_ns::baz()};