Ένας σημαντικός τρόπος για την οργάνωση του κώδικα είναι τα namespace.
Δύο συναρτήσεις μπορεί να έχουν σύγκρουση ονομάτων, η οποία μπορεί να λυθεί βάζοντάς τες σε διαφορετικά namespace.
Τα namespace μπορούν να είναι εμφωλευμένα, κάτι που μπορεί να βοηθήσει στη δόμηση μεγάλων βάσεων κώδικα.
Η πρόσβαση στα namespace γίνεται μέσω του τελεστή ανάλυσης εμβέλειας ::.
Το παρακάτω παράδειγμα δείχνει τη χρήση δύο διαφορετικών συναρτήσεων foo.
Χρησιμοποιούνται μαζί, βάζοντας μπροστά το namespace της καθεμιάς.
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()};
Τα βαθιά εμφωλευμένα namespace μπορεί να είναι υπερβολικά φλύαρα.
Μπορείς να αφαιρέσεις τη φλυαρία με εισαγωγή namespace μέσω του using.
Αυτό μεταφέρει όλα τα ονόματα στο καθολικό namespace.
Για να κρατήσεις κάποια διάκριση, τα ψευδώνυμα μπορεί να φανούν χρήσιμα.
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()};