Câu lệnh using namespace std; đưa toàn bộ tên trong namespace std vào phạm vi toàn cục (global scope). Điều này tiện cho code ví dụ ngắn nhưng không nên dùng trong dự án thực tế vì:
1. Ô nhiễm namespace (Namespace Pollution)
Namespace std chứa hàng trăm tên (vector, string, map, sort, count, ...). Kéo tất cả vào global scope làm tăng nguy cơ xung đột tên.
2. Xung đột tên (Name Collision)
Ví dụ: bạn tự định nghĩa hàm count() hoặc lớp list. Nếu đã using namespace std, trình biên dịch không biết dùng std::count hay ::count của bạn → lỗi ambiguous.
3. Giảm tính đọc hiểu và bảo trì
Không rõ ràng một identifier đến từ thư viện chuẩn hay code của mình. Khi đọc code lớn, std::vector rõ ràng hơn vector.
Thực hành tốt (Best Practice)
- Không bao giờ dùng
using namespace std;trong file header (.h/.hpp). - Trong file .cpp, có thể dùng
using std::cout;,using std::vector;cho các tên cụ thể cần dùng nhiều. - Hoặc gõ đầy đủ
std::vector,std::string... (rõ ràng, an toàn).
Ví dụ an toàn:
#include <iostream>
#include <vector>
// Chỉ nhập tên cần thiết
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<int> v = {1,2,3};
for (int x : v) cout << x << ' ';
cout << endl;
return 0;
}