C++Namespace


introduzione

Utilizzato per prevenire conflitti di nomi quando si utilizzano più librerie, uno spazio dei nomi è un prefisso dichiarativo per funzioni, classi, tipi, ecc.

Sintassi

  • identificatore di spazio dei nomi ( opt ) { declaration-seq }
  • identificatore di spazio dei nomi in linea ( opt ) { declaration-seq } / * dal C ++ 11 * /
  • inline ( opt ) namespace attributo- identificatore -seq identificatore ( opt ) { declaration-seq } / * dal C ++ 17 * /
  • namespace enclosing-namespace-specificifier :: identificatore { declaration-seq } / * dal C ++ 17 * /
  • identificatore dello spazio dei nomi = specificatore del namespace qualificato ;
  • usando namespace nested-name-specifier ( opt ) nome-spazio-nome ;
  • attribute-specificatore-seq utilizzando namespace nested-name-specificatore ( opt ) nome-spazio-nome ; / * dal C ++ 11 * /

Osservazioni

Lo namespace parole chiave ha tre significati diversi a seconda del contesto:

  1. Se seguito da un nome facoltativo e da una sequenza di dichiarazioni racchiuse tra parentesi, definisce un nuovo spazio dei nomi o estende uno spazio dei nomi esistente con tali dichiarazioni. Se il nome è omesso, lo spazio dei nomi è uno spazio dei nomi senza nome .

  2. Quando seguito da un nome e un segno di uguale, dichiara un alias di namespace .

  3. Quando è preceduto using e seguito da un nome di spazio dei nomi, forma una direttiva using , che consente di trovare nomi nello spazio dei nomi dato da una ricerca di nome non qualificata (ma non ridichiara quei nomi nell'ambito corrente). Una direttiva using non può verificarsi nell'ambito della classe.

using namespace std; è scoraggiato Perché? Perché lo namespace std è enorme! Ciò significa che c'è un'alta probabilità che i nomi entrino in collisione:

//Really bad!
using namespace std;

//Calculates p^e and outputs it to std::cout
void pow(double p, double e) { /*...*/ }

//Calls pow
pow(5.0, 2.0); //Error! There is already a pow function in namespace std with the same signature,
               //so the call is ambiguous

Namespace Esempi correlati