2012-08-15 21 views
6

thể trùng lặp:
Why is 'using namespace std;' considered a bad practice in C++?phong cách và không gian tên

Tôi đã nhìn thấy một số ví dụ mã nơi mọi người sử dụng, ví dụ, std::cout trong khi ở những nơi khác người ta sẽ có using namespace std; ở phía trên cho đơn giản thay thế. Cái nào thường được ưa thích?

+2

Một giải pháp thay thế khác là 'using std :: cout'. – hmjd

+6

[Tại sao 'sử dụng không gian tên std; 'được coi là một thực hành xấu?] (Http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c) – chris

+3

Nếu bạn muốn một quy tắc đơn giản: Không sử dụng chỉ thị 'using', bao giờ (tức là' sử dụng không gian tên abc; '); và sử dụng các khai báo 'using' (ví dụ:' using Base :: foo') chỉ để bỏ ẩn và điều khiển ADL. Tuy nhiên, hãy sử dụng bí danh không gian tên để giữ mã nguồn gọn gàng. –

Trả lời

3

Sử dụng std::cout để tránh bất kỳ tiềm năng xung đột tên. Nếu bạn sử dụng bằng cách sử dụng using namespace std;, bạn sẽ điền vào không gian tên chung của mình với tất cả tên std có thể xung đột với các lớp hoặc tên hàm bạn hoặc người khác trong nhóm của bạn đã viết. Này được giải thích tốt trong C++ faq lite và trong SO

2

Cá nhân tôi sử dụng tên gọi không gian tên đầy đủ khi viết mã, ví dụ: std::string, v.v. Nó làm cho mọi thứ rõ ràng hơn cho bất kỳ ai đọc điều đó, chức năng mà nhà phát triển muốn sử dụng.

Tôi đã nhìn thấy câu nói sau đây:

ghi nó một lần, đọc nó một ngàn lần ...

:)

0

lưu ý đầu tiên là bạn nên bao giờusing namespace trong một tiêu đề - bạn có thể đã được nhận thức về điều này. Lý do là nó sẽ mang lại using vào bất kỳ tệp nguồn nào bao gồm nó.

Ngay cả ở cấp tệp nguồn, tôi muốn rõ ràng đủ điều kiện các chức năng thư viện chuẩn và các lớp học liek std::cout. Tuy nhiên, trong một số trường hợp, tôi sẽ sử dụng cụ thể sử dụng thay thế để thuận tiện (ví dụ: using std:endl). Tôi thường thích trình độ rõ ràng tuy nhiên.

Các vấn đề liên quan