एक स्थिति पर विचार करें, जब हमारे पास एक ही क्लास में एक ही नाम, पियूष, के दो व्यक्ति हों। जब भी हमें उन्हें अलग करना हो, तो हमें निश्चित रूप से उनके नाम के साथ कुछ अतिरिक्त जानकारी का उपयोग करना होगा, जैसे क्षेत्र, यदि वे अलग क्षेत्र में रहते हैं या उनकी माता या पिता का नाम, आदि।
यही स्थिति आपके C++ एप्लिकेशन्स में उत्पन्न हो सकती है। उदाहरण के लिए, आप कुछ कोड लिख रहे होंगे जिसमें xyz() नामक एक फंक्शन है और एक अन्य लाइब्रेरी उपलब्ध है जिसमें xyz() नामक समान फंक्शन है। अब कंपाइलर के पास यह जानने का कोई तरीका नहीं है कि आपके कोड के भीतर आप xyz() फंक्शन के किस संस्करण का संदर्भ दे रहे हैं।
नेमस्पेस इस कठिनाई को दूर करने के लिए डिज़ाइन किया गया है और विभिन्न लाइब्रेरीज में समान नाम वाले समान फंक्शन्स, क्लासेस, वेरिएबल्स आदि को अलग करने के लिए अतिरिक्त जानकारी के रूप में उपयोग किया जाता है। नेमस्पेस का उपयोग करके, आप उस संदर्भ को परिभाषित कर सकते हैं जिसमें नाम परिभाषित हैं। सार में, एक नेमस्पेस एक स्कोप को परिभाषित करता है।
C++ में एक स्टैंडर्ड लाइब्रेरी है जिसमें आपके एप्लिकेशन बनाने के लिए सामान्य कार्यक्षमता होती है जैसे कंटेनर्स, एल्गोरिदम, आदि। यदि इनके द्वारा उपयोग किए जाने वाले नाम खुले में होते, उदाहरण के लिए, यदि वे वैश्विक स्तर पर queue क्लास परिभाषित करते, तो आप उसी नाम का फिर से उपयोग नहीं कर पाते बिना टकराव के। इसलिए उन्होंने एक नेमस्पेस, std बनाया, ताकि इस बदलाव को समाहित किया जा सके।
using namespace स्टेटमेंट का अर्थ है कि जिस स्कोप में यह मौजूद है, वहां std नेमस्पेस के तहत आने वाली सभी चीज़ें बिना प्रत्येक के आगे std:: प्रीफिक्स लगाए उपलब्ध करा दी जाएं।
हालांकि यह अभ्यास छोटे उदाहरण कोड या तुच्छ प्रोग्राम्स के लिए ठीक है, पूरे std नेमस्पेस को ग्लोबल नेमस्पेस में खींचना अच्छी आदत नहीं है क्योंकि यह नेमस्पेस के उद्देश्य को विफल करता है और नाम टकराव का कारण बन सकता है। (भले ही शुरू में कोई नाम टकराव न हो, वे रखरखाव के दौरान उभर सकते हैं जब अधिक कोड, लाइब्रेरीज आदि प्रोजेक्ट में जोड़े जाते हैं।) इस स्थिति को आमतौर पर नेमस्पेस प्रदूषण (namespace pollution) कहा जाता है।