Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tại sao "using namespace std" là thói quen xấu trong C++


using namespace std; đưa toàn bộ namespace std vào scope hiện tại, gây "ô nhiễm namespace" (namespace pollution).

Vấn đề

  1. Trùng tên: Nếu bạn định nghĩa hàm count() hoặc class list, sẽ xung đột với std::count, std::list.
  2. Khó đọc: Không rõ vector là std::vector hay custom.
  3. Rủi ro bảo trì: Thêm header mới có thể đưa symbol mới vào std, phá vỡ code cũ.

Ví dụ xung đột

#include <iostream>
#include <vector>
#include <algorithm> // có std::count
using namespace std;

int count = 10; // LỖI: trùng với std::count (function template)
// int count; // error: 'count' ambiguous

void count() {} // LỖI: trùng tên hàm
// void count(); // error: 'count' ambiguous

Thực hành tốt (Best Practices)

// 1. Chỉ dùng trong file .cpp, KHÔNG trong header (.h/.hpp)
using std::cout; using std::cin; using std::endl; // Chỉ lấy cái cần

// 2. Hoặc dùng prefix std:: (khuyên dùng nhất)
std::vector<int> v;
std::cout << "Hello\n";

// 3. Namespace alias cho tên dài
namespace fs = std::filesystem;
fs::path p = "file.txt";

// 4. Trong block scope cục bộ (hạn chế phạm vi)
void func() {
    using namespace std; // Chỉ ảnh hưởng trong func()
    cout << "OK\n";
}

Khi nào chấp nhận được?

  • Code ví dụ, tutorial, competitive programming (ngắn, kiểm soát).
  • File .cpp nội bộ, không phải header công khai.