Latest web development tutorials

C ++ namespace

Immaginate una situazione in cui vi è una classe di nome Zara due studenti, al fine di distinguere chiaramente tra di loro, si usa il nome di fuori, ha dovuto utilizzare alcune informazioni aggiuntive, come ad esempio il loro indirizzo di casa o dei loro genitori nome, ecc

La stessa situazione appare anche nell'applicazione C ++. Ad esempio, è possibile scrivere una funzione denominata XYZ (), in un'altra libreria a disposizione c'è anche una stessa funzione XYZ (). Così, il compilatore non è in grado di determinare ciò che si sta utilizzando una funzione XYZ ().

Pertanto, l'introduzione del concetto dinamespace, ideata per risolvere i problemi di cui sopra, può essere utilizzato come informazioni aggiuntive per distinguere diverse librerie con le stesse funzioni dei nomi, classi, variabili, e così via.L'utilizzo dello spazio dei nomi che viene definito contesto. In sostanza, il namespace è la definizione di un intervallo.

Definire gli spazi dei nomi

Definito namespace parola chiavenamespace, seguita dal nome dello spazio, come segue:

namespace namespace_name {
   // 代码声明
}

Al fine di richiamare una funzione o una variabile con uno spazio dei nomi, è necessario farlo precedere il nome dello spazio dei nomi, come segue:

name::code;  // code 可以是变量或函数

Vediamo come la definizione dello spazio dei nomi per l'entità e l'altra funzione variabile o:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 调用第一个命名空间中的函数
   first_space::func();
   
   // 调用第二个命名空间中的函数
   second_space::func(); 

   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Inside first_space
Inside second_space

utilizzando l'istruzione

È possibile utilizzare la direttivanamespace utilizzando, in modo che quando non è possibile utilizzare uno spazio dei nomi prefisso con il nome dello spazio dei nomi.Questa direttiva indica al compilatore che il codice successiva utilizzerà il nome dello spazio dei nomi specificato.

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   // 调用第一个命名空间中的函数
   func();
   
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Inside first_space

utilizzando istruzioni possono anche essere utilizzati per specificare gli elementi specifici dello spazio dei nomi. Ad esempio, se si intende utilizzare solo sezione namespace std cout, è possibile utilizzare la seguente dichiarazione:

using std::cout;

codice successivo quando si utilizza cout non è possibile aggiungere il nome del namespace come prefisso, ma namespacestd altre voci ancora bisogno di aggiungere il nome dello spazio dei nomi come prefisso, come segue:

#include <iostream>
using std::cout;

int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

std::endl is used with std!

Nomeutilizzando le istruzioni introdotte seguire le normali regole di visibilità.Nomi dauna direttiva usinginizialmente visibile fino alla fine del campo. In questo caso, lo stesso nome di fuori della portata della definizione di entità è nascosta.

namespace discontinua

Spazio dei nomi può essere definito in diverse parti, così lo spazio dei nomi è composto da diverse parti separatamente composizione definiti. I vari componenti di un namespace possono essere distribuiti su più file.

Pertanto, se la parte dello spazio dei nomi della necessità di richiedere un nome definito in un altro file, è ancora necessario dichiarare il nome. La seguente definizione dello spazio dei nomi può definire un nuovo spazio dei nomi, può essere per uno spazio dei nomi esistente per aggiungere nuovi elementi:

namespace namespace_name {
   // 代码声明
}

spazi dei nomi nidificati

Gli spazi dei nomi possono essere nidificate, è possibile definire un altro spazio dei nomi in uno spazio dei nomi, come segue:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

È possibile utilizzare l'operatore :: per accedere ai membri dello spazio dei nomi nidificati:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;

// 访问 namespace:name1 中的成员
using namespace namespace_name1;

Nella dichiarazione di cui sopra, se si utilizza namespace_name1, quindi all'interno della gamma di elementi namespace_name2 anche disponibile come segue:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // 第二个命名空间
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   // 调用第二个命名空间中的函数
   func();
   
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Inside second_space