C++ specific namespaces

using namespace std şeklindeki bir ad alanı kullanımı, std namespace içerisinde yer alan tüm varlıkları programımıza çağıracaktır. Bu durum, programımız geliştikçe, performansı olumsuz etkileyecektir.

Ad alanını, içerdiği tüm varlıklarla birlikte çağırmaktansa, sadece kullanacağımız varlıkları çağırmamız daha doğru bir kullanım olacaktır.

Örneğin, sadece cout kullanacağımız bir programda, namespace erişimi using std::cout şeklinde olmalıdır.

#include <iostream>

// using namespace std; //iptal
using std::cout;

/**
* bu şekilde kullanırsak, 
* tüm standart kütüphaneyi (std) 
* yüklememiş oluruz.
*
* gereksiz kullanımın önüne geçer
* ve performansı arttırır.
*
* sadece kullanacağımız varlıkların
* kısayolunu oluşturmuş oluruz.
*
*/

int main() {
    cout << "sadece cout.";
    return 0;
}

C++ namespaces (ad alanları)

Namespace (ad alanları) sınıflar, nesneler ve işlevler gibi varlıkları bir ad altında gruplamaya izin verir. Bu şekilde, global scope, her biri kendi adına sahip “alt kapsamlara” bölünebilir.

Namespace, isim çakışmalarını önlemek amacıyla kullanılır. Özellikle büyük projelerde isim bulmakta zorlanılacağı için namespace kullanılır. Erişim kolaylığı sağladığı gibi, benzer isimlerdeki varlıkların da birbirlerinden kolayca ayrıştırılmasına olanak sağlar.

Basit bir ad alanı tanımlayalım ve kapsam çözümleme operatörü ( :: ) ile içerisindeki varlığa erişelim.

#include <iostream>

namespace ad_alani
{
    int a = 10;
}

int main(){
    std::cout << ad_alani::a; 
    //ekrana 10 yazar.
}

using

using anahtar kelimesi, kapsam çözümleme operatörünü ( :: ) kullanmamıza gerek kalmadan, ad alanı içerisinde tanımlanan varlığa doğrudan erişir.

#include <iostream>

namespace ad_alani
{
    int a = 10;
}

using ad_alani::a;

int main(){
    std::cout << a; 
    //ekrana 10 yazar.
}

using namespace std

Programdaki std bir ad alanıdır. cout deyimi bu ad alanının içerisinde yer almaktadır.

Programın başında using deyimi ile bir kez std alan adının kullanılacağı bildirilirse, her cout
deyiminden önce std yazılmasına gerek kalmayacaktır.

#include <iostream>

// standart kütüphanesine 
// kısayol oluşturur.
// her seferinde std:: 
// yazmanıza gerek kalmaz.
using namespace std;

int main() {
    cout << "sadece cout";
    return 0;
}