C++ 98 orijinal niyeti o sadece C++ 11, ama <c*>
ilave oluyor, genel ad alanını (iyi, özellikle değil <cstdint>
kirliliğine yol açmaması için, C++ <cstdint>
kullanması gerektiğini oldu genel olarak başlıklar). Bununla birlikte, simgelerin sembolleri yine de global isim-alanına koymakta ısrarcı olmuştur ve C++ 11 bu uygulamayı onaylamıştır [*]. [11] Yani, temel olarak üç seçenek vardır:
- Kullanım
<cstdint>
ve ya tamamen kullandığınız ya da başka ayrıntılı çünkü using std::int32_t;
vb (can sıkıcı ile kapsam içine getirmek her tamsayı türü nitelemek, ancak sadece için böyle yapmak doğru yolu C++ standart kütüphanede başka sembol)
- Kullanım
<stdint.h>
(kullanımdan kaldırıldı çünkü biraz kötü)
- Kullanım
<cstdint>
ve genel ad (garanti çünkü çok kötü) içinde semboller koyacağız uygulamanızı varsayalım. Uygulamada
kod sinir bozucu bir büyük miktarda o <cstdint>
genel ad sembolleri koyar bir uygulama üstünde kaza yapmak kolay çünkü, son seçeneği kullanır şüpheleniyoruz. İlkini kullanmaya çalışmalısın. İkincisi, sadece belki de bunu yapmak yerine, global ad alanında bir şeyler koymak için garantili olduğunu bir erdem vardır. Bunun özellikle yararlı olduğunu düşünmüyorum, ancak önceliğiniz varsa, bazı yazımlar kaydedebilir.
Dördüncü seçenek var, #include <cstdint>
ve bunu takiben using namespace std;
takip ediyor, ancak bazen using namespace std;
'u koymamanız gereken yerler var. Farklı insanlar bu yerlerin olduğu yerlerde farklı fikirlere sahip olacaklar, fakat "üstbilgi dosyasında en üst düzeyde", "sınırlı bir kapsamda" daha kötü olan "bir cpp dosyasında en üst düzeyde" daha kötüdür. Bazı insanlar asla using namespace std;
yazmaz.
[*] Bu, C++ standart başlıklarının, genel ad alanına malzeme koymasına izin verilmesine rağmen, gerekli olmadığı anlamına gelir. Yani bu sembollerle çarpışmaktan kaçınmalısınız, ama aslında onları kullanamazsınız çünkü orada olmayabilirler. Temel olarak, C++'deki global isim alanı bir mayın tarlasıdır, bundan kaçınmaya çalışın.Komitenin, bir başlık dosyasında en üst düzeyde using namespace std;
'u yapıştırmak kadar zararlı olan uygulamalarla bir uygulamayı onayladığı iddia edilebilir. Bu fark, uygulamaların yalnızca C standart kütüphanesindeki semboller için yapmasıdır, oysaki using namespace std;
bunu yapar. C++ için - sadece semboller. Standartta gelecek eklemeler için ayrılan isimleri listeleyen C standardında bir bölüm var. Bu isimleri C++ global ad alanında da saklı kalmak gibi aptalca bir fikir değil, ama şart değil.
OS X 10.8 ' 'eksik. Aldığım hata: * './Misc.h: 7: 10: ölümcül hata: 'cstdint' dosyası bulunamadı *. –
jww
İlgili: [C üstbilgileri C++ kullanırken, std :: veya global ad alanı işlevlerini kullanmalı mıyız?] (Http://stackoverflow.com/q/32606023/2020827) – sergej