یک روش مهم برای سازماندهی کد، «فضای نام» است.
ممکن است اسم دو تابع با هم تداخل پیدا کند، و این تداخل را میتوان با قرار دادن آن دو در فضاهای نام متفاوت برطرف کرد.
فضاهای نام را میتوان تودرتو کرد، که میتواند به ساختاردهی به پایگاههای کد بزرگ کمک کند.
دسترسی به فضاهای نام از طریق عملگر تفکیک دامنهی :: انجام میشود.
مثال زیر استفاده از دو تابع متفاوت foo را نشان میدهد.
این دو تابع با افزودن فضای نام مربوط به هرکدام در ابتدای اسمشان، با هم به کار میروند.
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()};
فضاهای نام تودرتوی عمیق ممکن است بیش از حد پرگو باشند.
میتوان این پرگویی را با وارد کردن فضای نام به کمک using از بین برد.
این کار همهی اسمها را به فضای نام سراسری منتقل میکند.
برای حفظ برخی تمایزها، تعریف مستعارها میتواند مفید باشد.
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()};