2008-11-25 14 views
17

artık firma ile çalışan bir işçi tarafından yazılmış bazı kod üzerinde çalışıyorum, ben aşağıdaki kodu bulduk: (Ben aşağıyı kestik)C++ Namespace soru

namespace NsA { namespace NsB { namespace NsC { 

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

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

ben 3 ve 8. satırlarda ad alanı komutlarının amacını anlamıyorum.
Birisi adsız bir ad alanı girdisinin amacının ne olduğunu açıklayabilir mi?
Teşekkür

cevap

36

Bu "anonim ad alanı" - bu, "çeviri birimi" başına benzersiz olduğu garanti edilen bir gizli ad alanı adı oluşturur (ör., CPP dosyası başına).

Bu, etkili bir şekilde, bu ad alanındaki tüm öğelerin bu derleme biriminin dışından gizlendiği anlamına gelir. Sadece aynı dosyada kullanılabilirler. Ayrıca adlandırılmamış ad alanlarında this article'a bakın.

+0

İlginç. Bunu yapabileceğini bilmiyordum. Aklımda tutmak zorundayım. – Herms

+0

Ayrıca statik 'değişkenler' (derleme birim görünürlüğü) – xtofl

+1

statik ihtiyacını bazen de bazen yararlıdır. Adların isim bağını değiştirirken, isimsiz ad alanları isimlerin bağlantılarını değiştirecektir. –