Có nên sử dụng “using namespace std” hay không?

Translate to Vietnamese by kiennguyen
Nguồn: http://www.parashift.com/c++-faq-lit....html#faq-27.5
Câu trả lời là KHÔNG
Mọi người thường không thích việc phải gõ std:: ở mọi nơi, họ thích sử dụng “using namespace std” hơn vì chỉ với một vài thao tác gõ phím trình dịch sẽ thấy được tất cả các tên trong namespace std. Tuy nhiên điều đó cũng có nghĩa là trình dịch sẽ nhìn thấy cả các tên của namespace std mà bạn không hề có ý định sử dụng chúng. Nghĩa là bạn có thể vô tình tạo ra các tên xung đột với nhau hoặc các tên có ý nghĩa không rõ ràng. Ví dụ, chương trình của bạn sử dụng một biến đếm hoặc một hàm tên là count. Tuy nhiên thư viện chuẩn cũng có một hàm tên là count và điều này có thể gây ra sự nhập nhằng.

Ý nghĩa của việc sử dụng các namespace là để ngăn ngừa việc xung đột giữa các đoạn code được phát triển một cách độc lập. Việc sử dụng “using namespace XYZ” (hay còn gọi là using-directive) sẽ đặt một namespace vào một namespace khác và điều này đi ngược lại với mục đích ban đầu của các namespace.
Sử dụng using-directive là cách đơn giản nhất để chuyển các chương trình C++ cũ sang việc sử dụng các namespace. Tuy nhiên bạn không nên tiếp tục sử dụng chúng trong các chương trình mới.

Nếu vẫn muốn tránh việc gõ std:: ở mọi nơi, bạn có thể sử dụng using-declaration để chỉ rõ ra các tên mà trong namespace std mà bạn muốn sử dụng. Ví dụ đoạn code dưới đây sử dụng using-declaration để chỉ rõ ra bạn muốn sử dụng và chỉ sử dụng tên cout của namespace std mà thôi:



cpp Code:
#include < iostream > #include < vector > void f(const std::vector& v) {     using std::cout; // Sử dụng tên cout trong namespace std     cout << "Values:";     for (std::vector::const_iterator p = v.begin(); p != v.end(); ++p)         cout << ' ' << *p;     cout << '\n'; }


Nếu sử dụng std:: ở mọi nơi, đoạn code trên sẽ như sau


cpp Code:
#include < iostream > #include < vector > void f(const std::vector& v) {     std::cout << “Values:;     for (std::vector::const_iterator p = v.begin(); p != v.end(); ++p)         std::cout << ‘ ‘ << *p;     std::cout << ‘\n’; }

Theo quan điểm cá nhân thì bạn nên sử dụng std:: ở mọi nơi, vì như vậy còn nhanh hơn là việc phải nghĩ xem với một tên trong namespace nào đó, có cần thiết phải sử dụng using-declaration hay không và nếu có thì sử dụng trong phạm vi nào.
Tất nhiên, cả hai cách nói trên đều tốt. Điều quan trọng là bạn là thành viên của một nhóm làm việc và bạn phải tuân theo những chuẩn chung do nhóm của bạn đề ra

Nhận xét

Bài đăng phổ biến từ blog này

Kinh nghiệm tạo biểu đồ Use Case

PHÉP TOÁN XOR

Phần mềm hỗ trợ vẽ bản đồ tư duy trên máy tính

Power Designer 12.5