Başkaları tarafından kodda using namespace std;
yazmanın yanlış olduğu ve bunun yerine doğrudan std::cout
ve std::cin
kullanmam gerektiği söylendi.
Neden using namespace std;
kötü bir uygulama olarak kabul edilir? Verimsiz midir yoksa belirsiz değişkenler (std
ad alanındaki bir işlevle aynı adı paylaşan değişkenler) bildirme riski var mıdır? Performansı etkiler mi?
Bunun performansla hiçbir ilgisi yoktur. Ancak şunu düşünün: Foo ve Bar adında iki kütüphane kullanıyorsunuz:
using namespace foo;
using namespace bar;
Her şey düzgün çalışır ve Foo'dan Blah()
ve Bar'dan Quux()
işlevlerini sorunsuzca çağırabilirsiniz. Ancak bir gün Foo 2.0'ın yeni bir sürümüne geçtiniz ve bu sürüm artık Quux()
adında bir işlev sunuyor. Şimdi bir çakışma var: Hem Foo 2.0 hem de Bar global isim alanınıza Quux()
import ediyor. Bunu düzeltmek biraz çaba gerektirecektir, özellikle de fonksiyon parametreleri eşleşiyorsa.
Eğer foo::Blah()
ve bar::Quux()
kullanmış olsaydınız, foo::Quux()
un devreye girmesi bir olay olmazdı.
Bir başka neden de sürprizdir.
Eğer std::cout << blah
yerine cout << blah
görürsem şöyle düşünürüm: Bu cout
nedir? Normal cout
mu? Özel bir şey mi?
Her şey karmaşıklığı yönetmekle ilgili. İsim alanını kullanmak, istemediğiniz şeyleri içeri çekecek ve böylece muhtemelen hata ayıklamayı zorlaştıracaktır (muhtemelen diyorum). Her yerde std:: kullanmak okumayı zorlaştırır (daha fazla metin ve hepsi bu).
Her koyun kendi bacağından asılır - karmaşıklığınızı elinizden geldiğince ve kendinizi en iyi hissettiğiniz şekilde yönetin.