C++ ile adlandırılmamış ad alanı ne zaman kullanılır? Özgür durma işlevinden daha iyi midir? Ayrıca, sadece kaynak dosyasında ve başlık dosyasında kullanılmamalıdır?C++ 'da adlandırılmamış ad alanının kullanımı
cevap
Stroustrup'a göre, eski C'deki static
globals'ı yaptığınız yerlerde kullanmalısınız. Buradaki fikir, söz konusu öğelerin içinde bulundukları kaynak dosyaya "genel" olabileceği, ancak derlemenizdeki diğer kaynak dosyaların ad alanını kirletemeyeceği.
Başka bir deyişle, , C++ numaralı telefondan static
globals oluşturmamalısınız. Bunun yerine adlandırılmamış ad alanları kullanmalısınız.
Başlık dosyalarında yararlı oldukları bazı durumlar buldum, ancak bu nadirdir. Çoğunlukla fırlatabilir istisnalar bildirmek için düşünüyorum. Bu durumda, söz konusu tanımlar, #include
'un bu başlığa ait olduğu her şey için global olacak, ancak olmayan şeyler için geçerli olacaktır.
isimli bir isim alanına taşınacağım, statik 'artık FCD'nin son sayısında (n3225) onaylanmamış olarak işaretlendi. Komite, tek bir işlev veya küresel için daha az ayrıntılı olduğunu kabul etti. Bildirimin yanında göründüğü ve ayrıştırıcı gerektirmediği için "grep" de daha kolaydır. –
@Matthieu: ancak daha sonra işlevler iç bağlantıya sahiptir. Adsız ad alanlarının "üstün" olarak adlandırılmasının asıl nedeni, nesnenin/işlevin bağlantılarını değiştirmekten ziyade sembolü "gizlemek" dir, bu da insanların genellikle kullandıklarında elde etmek istedikleri şeyle daha yakın bir eşleşmesidir. Bu, C++ 0x'da değişmedi, (1) eğer dış bağlantının pahalı olacağını düşünürseniz, o zaman içsel bağlantı istediğinizi fark ettiler, ki bu da 'statik' anlamına gelir ve (2) 'uyumluluğundan dolayı bu bağlamda asla' statik'i kaldırmayacağım, bu yüzden kullanımdan kaldırılması boş bir tehdittir. –
@Steve: Bağlantıyı da değiştirmeyi beklerdim, kimsenin sembolü bilmiyorsa onu dışarıda tutmanın amacı nedir? –
İsim gizlemek için kullanılır. Adsız her ad alanı benzersizdir. Bağlantı here daha ayrıntılı olarak açıklanmaktadır. Tipik olarak sadece iç bağlantıya sahip olması gereken (örneğin dış dünyaya maruz kalmayan) fonksiyonları gizlemek için bir kaynak dosyasında kullanılır.
Adsız ad alanı çeviri birimine özeldir ve bu, genel değişkenleri ve işlevleri farklı çeviri birimlerinde aynı isimlerle korumak için kullanılabilir, böylece hiçbir bağlantı çakışması ortaya çıkar. Örneğin, yalnızca bir .cpp dosyasında tanımlanacak ve yalnızca bu dosya içinde kullanılacak bir sınıfa ihtiyacınız vardır. CModuleLock
'u aramak istiyorsunuz. Adsız bir ad alanında ve başka bir .cpp dosyasında bulunmuyorsa, başka bir adla CModuleLock
adında bir adsız ad alanı bulunmuyorsa, programınızı bağlayamazsınız.
Bazen özel iç sınıf olabilecek sınıflar için adsız ad alanlarını kullanıyorum, ancak benzer sınıflar arasında paylaşmak istiyorum (belki de aynı kavramı uygulayanlar). Tabii ki sınıf yeterince genel hale geldiyse, – RichardBruce
Adlandırılmamış ad alanları, genel statik değişkenlerin ve işlevlerin "C++ sürümü" dür. Sınıflar için adsız bir ad alanı da kullanabileceğinizi unutmayın.
Temelde, ad da bu konuya bakın sınıflar, ve daha fazla bilgi fonksiyonu kullanılmaktadır tanımlayıcılar https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c.html
- 1. Birim testinde geçici karşılaştırma için C++ 'da adlandırılmamış kapsayıcı oluşturma
- 2. Ad alanının işlevleri nasıl listelenir?
- 3. Clojure: ad alanının ismine gönderme
- 4. System.ComponentModel ad alanı kullanımı
- 5. C yapısında adlandırılmamış alanlar nasıl adlandırılır?
- 6. C++ 'da bellek kullanımı nasıl bilinir
- 7. autoload_paths ad alanının farkında değil misiniz?
- 8. KDB +/Q Kök ad alanının ad alanından erişilmesi
- 9. Symfony 2 form alanının ad niteliğini ayarlama
- 10. Adlandırılmamış ad alanında bulunan sınıf bildirimi nasıl iletilir
- 11. C++ adsız (Anonim) ad tanımı
- 12. MySql'de adlandırılmamış Yabancı Anahtarını Gizle
- 13. C Düzensiz Çokgen Alanının Hesaplanması C#
- 14. C++ 'da operatör anahtar kelimesinin kullanımı burada ne anlama geliyor?
- 15. C++ 'da std bind kullanımı argümanlı (string) işlevler için
- 16. C# Başvurulan Ad Alanı Gizli By Sınıf Ad Alanı
- 17. Eclipse ile C++ Kullanımı
- 18. Ad alanının A veya B olduğu bir QueryExpression oluşturma
- 19. Bir ad alanının varlığı nasıl kontrol edilir php
- 20. RestTemplate içinde unmarshalling sırasında xml ad alanının göz ardı edilmesi
- 21. Raylar denetleyici filtresini belirli bir ad alanının tüm denetleyicilerine uygulayın.
- 22. Clojure'da kendi ad alanının dışında bir türü nasıl kullanıyorsunuz?
- 23. clojure içinde, geçerli ad alanının dosya adını nasıl alabilirim?
- 24. Ad alanı ve arkadaşın C++ ile etkileşimi?
- 25. XSD Ad Alanı C# Ad Alanı
- 26. C++: Sınıf üyelerinde adlandırılmamış şablon parametreleri nasıl kullanılır?
- 27. C++ tensorflow içinde kullanımı
- 28. C Programında #define Kullanımı
- 29. C++ sınıf Sınıfının kullanımı;
- 30. Array.forEach içinde adlandırılmamış diziye erişim
aşağıda verilen linke tıklayın aynı adı arasındaki çatışmaları çözmek: [? Statik üzerinde isimsiz ad alanının Üstünlüğünü] (http://stackoverflow.com/questions/4422507/superiority-of-unnamed-namespace-over-static) – Nawaz