01/10/2018, 17:24

Tại sao không nên sử dụng “using namespace std;” ở file header

Chào mọi người, Mình có đọc ở quyển THINKING IN C++ có đề cập tới việc không nên sử dụng “using namespace std;” ở file header. Mình k hiểu lắm, ai có thể giúp mình thông não được k ạ?

viết 19:33 ngày 01/10/2018

vì để tránh viết hàm trùng tên hàm có trong thư viện khác đó mà

Tao Không Ngu. viết 19:24 ngày 01/10/2018

Hi Thắng Phan Lương Công.

  1. Bạn cần hiểu namespace dùng để chia nhỏ không gian tên cho phép đặt tên lớp giống nhau trong các không gian tên khác nhau. VD trong không gian tên xe_cộ có lớp con_ốc và trong không gian tên động_vật cũng có lớp con_ốc -> khi bạn dùng cả hai cái trong cùng một code thì nó sẽ là xe_cộ::con_ốc và động_vật::con_ốc.
  2. Tuy nhiên viết std::cout hơi dài nên nếu không có tên lớp giống nhau thì bạn có thể dùng using namespace std; và sau đó dùng cout.
  3. Vậy vấn đề đây là gì ? Khi bạn dùng header (thực tế là macro) hậu quả là mọi file include nó sẽ mặc định có using namespace và nếu bạn include các thư viện include nó (tính di truyền) thì nó cũng sẽ dùng namespace đó dẫn đến việc không thể quản lý được namespace (Đang dùng cái nào và được thêm ở đâu.)
  4. Về mặt phương pháp luận thì file header chỉ dùng khai báo nguyên mẫu hàm và việc thêm using namespace là không cần thiết.
Thắng Phan Lương Công viết 19:34 ngày 01/10/2018

oh, thế thì phải chịu khó code dài thêm 1 chút thôi, Cảm ơn bạn!

Tao Không Ngu. viết 19:28 ngày 01/10/2018

Hi Thắng Phan Lương Công.
Cái đó cũng không hẳn tùy vào cấu trúc code mà bạn có lựa chọn phù hợp. Bạn using trong file code bình thường không vấn đề gì nếu không dùng có xung đột về tên lớp.

P/S Thường thì người ta code file xxx.h chứa nguyên mẫu xxx.cpp chứa code. Nếu bạn code trong file xxx.h nữa thì cần xem lại.

Bài liên quan
0