Xét trường hợp hai người cùng tên Piyush trong cùng lớp. Để phân biệt, cần thông tin thêm: khu vực, tên cha/mẹ, v.v.
Tương tự trong C++: bạn viết hàm xyz(), thư viện khác cũng có xyz(). Compiler không biết bạn dùng phiên bản nào.
Namespace giải quyết khó khăn này, dùng như thông tin thêm để phân biệt hàm, lớp, biến trùng tên ở thư viện khác nhau. Namespace định nghĩa bối cảnh (scope) cho tên.
C++ có thư viện chuẩn (container, algorithm...). Nếu tên này để toàn cục (ví dụ lớp queue toàn cục), bạn không thể dùng tên đó nữa. Do đó tạo namespace std chứa chúng.
using namespace std nghĩa là trong phạm vi hiện tại, làm cho mọi thứ dưới std có sẵn mà không cần tiền tố std::.
Mặc dù chấp nhận được cho code ví dụ ngắn, nhưng kéo toàn bộ std vào global namespace là thói quen xấu: làm mất mục đích namespace, gây va chạm tên (namespace pollution). Dù ban đầu không va chạm, sau khi thêm code/thư viện có thể xảy ra.