พิจารณาสถานการณ์ ที่เรามี 2 คนชื่อเดียวกัน คือ Piyush ในห้องเรียนเดียวกัน เมื่อต้องแยกกัน เราจะต้องใช้ข้อมูลเพิ่มเติม เช่น พื้นที่อยู่อาศัย หากอยู่คนละที่ หรือชื่อพ่อ/แม่ ฯลฯ
สถานการณ์เดียวกันอาจเกิดในแอปพลิเคชัน C++ ของคุณ เช่น คุณอาจเขียนโค้ดที่มีฟังก์ชันชื่อ xyz() และมีไลบรารีอีกตัวที่มีฟังก์ชัน xyz() เช่นกัน ตอนนี้คอมไพเลอร์ไม่มีทางรู้ว่าคุณอ้างถึง xyz() ตัวไหน
Namespace ออกแบบมาเพื่อแก้ปัญหานี้ ใช้เป็นข้อมูลเพิ่มเติมเพื่อแยกฟังก์ชัน, คลาส, ตัวแปร ที่มีชื่อเหมือนกันในไลบรารีต่างๆ ด้วย namespace คุณกำหนด context ที่ชื่อถูกกำหนด ในทางอ้อม namespace กำหนด scope
C++ มี standard library ที่ประกอบด้วยฟังก์ชันทั่วไปที่คุณใช้สร้างแอปพลิเคชัน เช่น containers, algorithms ฯลฯ หากชื่อที่ใช้โดยสิ่งเหล่านี้อยู่ใน global scope ตรงๆ เช่น ถ้าพวกเขากำหนด queue class แบบ global คุณจะไม่มีโอกาสใช้ชื่อเดียวกันอีกโดยไม่ชน ดังนั้นพวกเขาสร้าง namespace ชื่อ std ไว้รวมสิ่งเหล่านี้
คำสั่ง using namespace หมายความว่า ใน scope ที่มันอยู่ ให้ทำให้ทุกอย่างภายใต้ namespace std ใช้งานได้โดยไม่ต้องขึ้นคำนำหน้า std:: ทุกครั้ง
แม้การปฏิบัตินี้จะยอมรับได้สำหรับโค้ดตัวอย่างสั้นหรือโปรแกรมเล็กๆ แตการดึง namespace std ทั้งหมดเข้าสู่ global namespace ไม่ใช่พฤติกรรมที่ดี เพราะทำลายวัตถุประสงค์ของ namespaces และอาจนำไปสู่ name collisions (แม้เริ่มต้นไม่ชน ก็อาจเกิดระหว่าง maintenance เมื่อเพิ่มโค้ด/ไลบรารี) สถานการณ์นี้เรียกว่า namespace pollution