Ở đây bạn đi:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Bằng cách viết theo cách này, chúng tôi tránh được ADL dễ bị lỗi cùng với việc sử dụng các chỉ thị và khai báo.
Điều này có nghĩa là một câu trả lời mỉa mai. : -D
Tôi với Herb Sutter trên Google về điều này. Từ các tiêu chuẩn mã hóa C ++:
Bạn có thể và nên sử dụng không gian tên bằng cách sử dụng các khai báo và chỉ thị một cách tự do trong các tệp triển khai của mình sau các lệnh #incoide và cảm thấy tốt về nó. Mặc dù nhiều lần khẳng định ngược lại, không gian tên sử dụng các khai báo và chỉ thị không phải là xấu xa và chúng không đánh bại mục đích của các không gian tên. Thay vào đó, chúng là những gì làm cho không gian tên có thể sử dụng .
Bạn có thể ám ảnh về các xung đột không gian tên tiềm năng có thể sẽ không bao giờ xuất hiện và có thể sẽ không khó khắc phục trong một sự kiện thiên văn hiếm gặp như vậy bằng cách cẩn thận tránh các using
chỉ thị và chỉ định rõ ràng từng điều bạn sử dụng (cho các nhà khai thác) bằng các using
tuyên bố, hoặc chỉ cần đi trước và bắt đầu using namespace std
. Tôi đề nghị sau này từ một quan điểm năng suất.
Hầu hết các sách văn bản c ++ dạy người mới bắt đầu với việc sử dụng không gian tên std; Có phải họ tuyên truyền thực hành mã hóa kém?
Ngược lại nếu bạn hỏi tôi, và tôi tin Sutter ở trên đồng ý.
Bây giờ, trong suốt sự nghiệp của mình, tôi đã gặp phải khoảng 3 xung đột không gian tên do kết quả trực tiếp của các using
chỉ thị trong các cơ sở mã hóa kéo dài hàng chục triệu LỘC. Tuy nhiên, trong cả 3 trường hợp, chúng đều nằm trong các tệp nguồn kéo dài hơn 50.000 dòng mã kế thừa, ban đầu được viết bằng C và sau đó được bastard hóa thành C ++, thực hiện một danh sách các hàm phân tách lớn, bao gồm các tiêu đề từ hàng tá thư viện khác nhau và có một danh sách sử thi #includes
kéo dài trên một trang. Mặc dù có sự lộn xộn sử thi, nhưng chúng không quá khó để sửa vì chúng gây ra lỗi xây dựng trên OSX (một hệ điều hành không thể xây dựng mã), không phải lỗi thời gian chạy. Đừng tổ chức mã của bạn theo cách ác mộng này và bạn sẽ ổn thôi.
Điều đó nói rằng, tránh cả using
chỉ thị và khai báo trong các tệp tiêu đề. Đó chỉ là chậm phát triển. Nhưng đối với các tệp nguồn và đặc biệt là các tệp không có toàn bộ trang chứa đầy các #include
chỉ thị, tôi sẽ nói đừng đổ mồ hôi nếu bạn không làm việc cho Google.