2008-11-25 53 views
17

tôi đang làm việc trên một số mã được viết bởi một người đồng nghiệp không còn hoạt động với công ty, và tôi đã tìm thấy đoạn mã sau: (mà tôi đã cắt xuống dưới)C++ Namespace câu hỏi

namespace NsA { namespace NsB { namespace NsC { 

    namespace { 
     class A { /*etc*/ }; 
     class B { /*etc*/ }; 
    }  

    namespace { 
     class C { /*etc*/ }; 
    } 
} } } 

tôi không hiểu mục đích của các lệnh không gian tên trên dòng 3 và 8.
Ai đó có thể giải thích mục đích của một mục nhập không gian tên không có tên là gì?
Cảm ơn

Trả lời

36

Đó là "không gian tên ẩn danh" - tạo một tên không gian tên ẩn được đảm bảo là duy nhất cho mỗi "đơn vị dịch" (nghĩa là mỗi tệp CPP).

Điều này có nghĩa là tất cả các mục bên trong không gian tên đó được ẩn từ bên ngoài đơn vị biên dịch đó. Chúng chỉ có thể được sử dụng trong cùng một tệp. Xem thêm this article trên các không gian tên chưa đặt tên.

+0

Thú vị. Tôi không biết bạn có thể làm điều đó. Tôi sẽ phải ghi nhớ điều đó. – Herms

+0

Nó cũng che khuất sự cần thiết của các biến 'tĩnh' (hiển thị đơn vị biên dịch) – xtofl

+1

tĩnh đôi khi vẫn hữu ích. nó sẽ làm cho các tên không có liên kết bên ngoài, trong khi các không gian tên vô danh sẽ đặt tên thay đổi liên kết của các tên. –