Spazio dei nomi C ++

Spazio dei nomi C ++
Uno spazio dei nomi in C ++ è un ambito generalizzato. La sua dichiarazione inizia con la parola riservata, spazio dei nomi, seguita da un nome di scelta del programmatore, quindi il blocco in parentesi graffe. Il blocco contiene dichiarazioni di base e/o definizioni di oggetti C ++, funzioni e altre entità.

Prendi in considerazione le seguenti due dichiarazioni scalari in un ambito globale, nel seguente programma:

#includere
Utilizzo dello spazio dei nomi std;
int varid = 5;
float varid = 2.3;
int main ()

restituzione 0;

Un tentativo di compilare questo programma porta a un errore di compilazione. Ci sono due variabili con lo stesso nome, Varid. Sebbene siano due diverse variabili di due tipi diversi, int E galleggiante, Il compilatore rifiuta le due dichiarazioni perché sono dello stesso nome. Il seguente programma risolve questo problema dichiarando le variabili con lo stesso nome in due diversi ambiti generalizzati:

#includere
Utilizzo dello spazio dei nomi std;
spazio dei nomi Na

int varid = 5;

spazio dei nomi nb

float varid = 2.3;

int main ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
restituzione 0;

L'output è il seguente:

5
2.3

Ci sono due spazi dei nomi nel programma sopra: N / A, che ha la definizione di un numero intero e Nb, che ha la definizione di un galleggiante ma con lo stesso nome del numero intero per NA. Infine, quando è stato eseguito il programma, è stato utilizzato lo stesso nome per due variabili diverse. Si noti che per accedere allo stesso nome di due variabili diverse, è necessario utilizzare il nome particolare per lo spazio dei nomi, seguito dall'identificatore comune. Il nome dello spazio dei nomi e l'identificatore comune sono separati dall'operatore di risoluzione dell'ambito, ":::."Il nome degli spazi dei nomi differenzierà gli oggetti.

Questo articolo copre il concetto di base di uno spazio dei nomi e il suo utilizzo nel linguaggio di programmazione C ++. Per seguire questo articolo, dovresti avere una conoscenza di base del linguaggio C ++. Dovresti anche conoscere l'ambito C ++, sebbene sia brevemente spiegato in questo articolo. Per saperne di più sull'ambito di C ++, cerca la frase "Ambito in C ++" (senza citazioni) nella casella di ricerca di qualsiasi LinuxHint.Pagina Web com e premere Invio. Questo ti porterà all'articolo che questo autore ha scritto.

Contenuto dell'articolo

  • Cos'è uno spazio dei nomi?
  • La direttiva usando
  • Spazi dei nomi nidificati
  • Spazio dei nomi standard
  • Conclusione

Cos'è uno spazio dei nomi?

Una regione dichiarativa è la parte più grande di un programma in cui è valido il nome di un'entità (variabile). Questa regione è chiamata portata. Uno spazio dei nomi in C ++ è un ambito generalizzato il cui scopo principale è risolvere i conflitti dei nomi. Uno spazio dei nomi ha dichiarazioni di base e/o definizioni di entità.

Spazio dei nomi globali e il suo problema

Lo spazio dei nomi globali è l'ambito globale. Considera il seguente breve programma:

#includere
Utilizzo dello spazio dei nomi std;
int ident = 55;
Float IDent = 12.17;
int main ()
restituzione 0;

Nel programma sopra, ci sono due variabili, entrambe chiamate identificarsi. Queste variabili sono nell'ambito globale; Cioè, sono nello spazio dei nomi globali. Un tentativo di compilare questo programma fallirà con un messaggio di errore. L'ambito globale non accetta più di una variabile con lo stesso nome, quindi è necessario uno spazio dei nomi personalizzato.

Spazio dei nomi personalizzati

Uno spazio dei nomi non ha un solo nome. Invece, uno spazio dei nomi ha una serie di nomi per evitare conflitti con altri set di nomi. Per evitare il conflitto inferiore nel codice, precedere ogni nome con il nome dello spazio dei nomi e ::: . Il seguente programma lo illustra utilizzando due spazi dei nomi personalizzati:

#includere
Utilizzo dello spazio dei nomi std;
spazio dei nomi Na

int varint = 6;
float flt;

spazio dei nomi nb

int varint = 7;
float flt;

int main ()

cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
Na :: flt = 2.5;
Nb :: flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
restituzione 0;

L'output è:

6
7
2.5
4.8

Nota che i nomi Na :: flt E Nb :: flt alla fine sono stati definiti in principale() funzione. C ++ non consente una tale definizione nell'ambito globale.

Si noti che lo spazio dei nomi personalizzato è uno spazio dei nomi nidificato per lo spazio dei nomi globali.

La direttiva usando

Per evitare di digitare "Namepace :: Nome" tutto il tempo invece di solo "nome" dopo aver dichiarato lo spazio dei nomi, è possibile utilizzare il usando direttiva. La sintassi per usare il file usando La direttiva è la seguente:

Utilizzo di namespace namespace_name;

IL usando La direttiva non è una direttiva preprocessore, quindi termina con un punto e virgola (;).

Il seguente programma illustra l'uso del usando Direttiva e altro:

#includere
Utilizzo dello spazio dei nomi std;
spazio dei nomi nb

int varint = 7;
int func ()
restituire Varint;


int fn ()
Utilizzo dello spazio dei nomi NB;
int myvar2 = func ();
// Altri oggetti e funzioni da NB seguono.
restituire myvar2;

int myvar3 = nb :: func ();
int main ()
cout << fn() << " << myVar3 << '\n';
restituzione 0;

L'output di questo programma è 7 7. Il termine "Utilizzo dello spazio dei nomi NB;"È stato posto all'inizio del fn () definizione. IL func () Dallo spazio dei nomi NB è chiamato appena sotto quello, senza precedenti con "NB ::."

Una variabile dichiarata nell'ambito globale (spazio dei nomi globali) è vista dal punto di dichiarazione fino alla fine del file. Si vede anche negli spazi dei nomi nidificati (ambiti nidificati), come i nidificati fn () Ambito da funzione sopra. IL usando La direttiva si unisce al suo spazio dei nomi dalla posizione in cui è posizionata all'estremità dell'ambito in cui è posizionato.

Il nome func () dallo spazio dei nomi NB non può essere visto sotto il fn () Definizione perché "Utilizzo dello spazio dei nomi NB; " è stato posizionato all'interno dell'ambito della funzione (blocco). In questa condizione, usare "func ()"All'esterno del blocco dello spazio dei nomi NB (portata), deve essere preceduto da"NB ::,"Come nella seguente affermazione:

int myvar3 = nb :: func ();

IL usando La direttiva si unisce al suo spazio dei nomi con lo spazio dei nomi di nidificazione esterno dalla posizione in cui è posizionato all'estremità dello spazio dei nomi di nidificazione esterno. Nel seguente programma, lo spazio dei nomi NA è unito allo spazio dei nomi globali. Entrambi i nomi si estendono quindi nel fn () Spazio dei nomi delle definizioni della funzione, in cui sono uniti allo spazio dei nomi NB. Lo spazio dei nomi NB termina alla fine del fn () Definizione della funzione e le due spazi dei nomi precedenti continuano fino alla fine del file (leggi il codice).

#includere
Utilizzo dello spazio dei nomi std;
spazio dei nomi Na

int varint = 6;
int func ()
restituire Varint;


spazio dei nomi nb

int varint = 7;
int func ()
restituire Varint;


Utilizzo dello spazio dei nomi NA;
int myvar0 = Varint;
// Altri oggetti e funzioni da :: e NB seguono.
int fn ()
int myvar1 = Varint;
Utilizzo dello spazio dei nomi NB;
int myvar2 = nb :: func ();
// Altri oggetti e funzioni da NB seguono, fino alla fine di questo ambito.
restituire myvar1 + myvar2;

// Solo oggetti e funzioni da :: e NB seguono.
int myvar3 = nb :: func ();
int main ()
cout << myVar0 << " <<
fn () << " << myVar3 <<
'\N';
restituzione 0;

L'output è 6, 13, 7.

Nota: Lo spazio dei nomi globali è indicato con ::: , significa che non c'è nulla prima dell'operatore di risoluzione dell'ambito che segue.

Sotto l'affermazione, il "Utilizzo dello spazio dei nomi NA;"Le variabili dagli spazi dei nomi globali e NA possono essere utilizzate senza un'indicazione dello spazio dei nomi di origine. L'istruzione successiva utilizza il Varint dello spazio dei nomi NA. La regione dello spazio dei nomi combinate globali e NA si estende nel fn () spazio dei nomi delle funzioni. Così il Varint della prima affermazione nel fn () portata della funzione, è dello spazio dei nomi NA.

Poiché la regione per gli spazi dei nomi globali e NA si estende durante il fn () portata, dopo il "int myvar2 = nb :: func ();,"Qualsiasi nome dallo spazio dei nomi NB può essere utilizzato solo in fn () portata senza precederlo con "NB ::,"Solo se non si è verificato negli spazi dei nomi NA e globali (blocchi). Altrimenti, dovrebbe essere preceduto da "NB ::."La regione degli spazi dei nomi combinati per Na e globale continua sotto fn () Definizione e in principale() funzione fino alla fine del file.

L'estensione dello spazio dei nomi NB inizia da "int myvar2 = nb :: func ();" nel fn () bloccare e termina alla fine del fn () Blocco di definizione.

Nota: Spazi dei nomi le cui regioni sono unite non dovrebbero avere lo stesso nome variabile nei loro diversi blocchi di spazio dei nomi, poiché ciò causerebbe ancora conflitto.

Regioni dello spazio dei nomi

Uno spazio dei nomi è un ambito. Oltre allo spazio dei nomi globali (ambito globale), qualsiasi spazio dei nomi dovrebbe essere dichiarato in un blocco. Quel blocco è la prima parte delle regioni probabilmente distribuite dello spazio dei nomi. Con la direttiva usando, lo spazio dei nomi può essere esteso come regioni in altri ambiti.

Si dice che le entità dichiarate in un organo dello spazio dei nomi siano membri dello spazio dei nomi e si dice che i nomi introdotti da queste dichiarazioni nella regione dichiarativa dello spazio dei nomi siano nomi membri dello spazio dei nomi.

Spazi dei nomi nidificati

Il seguente programma mostra spazi nomi nidificati:

#includere
Utilizzo dello spazio dei nomi std;
spazio dei nomi a
int i = 1;
spazio dei nomi b
int i = 2;
spazio dei nomi c
int i = 3;



int main ()

cout << A::i << " <<
A :: B :: i << " <<
A :: b :: c :: i << '\n';
restituzione 0;

L'output è:

1 2 3

Si noti che i tre valori sono stati accessibili utilizzando l'operatore di risoluzione dell'ambito.

Spazio dei nomi standard

C ++ ha una libreria chiamata Biblioteca standard. I nomi di oggetti, funzioni e altre entità in questa libreria provengono da uno spazio dei nomi chiamato spazio dei nomi standard, scritto come std. La libreria standard contiene sub-bibrandi e una di queste sub-bibrandi è iostream. IL iostream La libreria contiene l'oggetto cout, che viene utilizzato per inviare i risultati alla console (terminale).

Il nome cout deve essere in std spazio dei nomi. Usare iostream con i suoi std spazio dei nomi, il programma dovrebbe essere il seguente:

#includere
Utilizzo dello spazio dei nomi std;

Nota l'uso del usando direttiva e std. Il termine "#includere "È una direttiva preprocessore e non finisce con un punto e virgola. Include il "file" iostream nella posizione della sua direttiva.

Conclusione

Uno spazio dei nomi è un ambito. Lo spazio dei nomi (definizione) contiene dichiarazioni di base e/o definizioni di oggetti, funzioni e altre entità C ++. Al di fuori della definizione dello spazio dei nomi, è possibile accedere al nome con la sintassi, "namespacename :: nome."A parte lo spazio dei nomi globali (ambito globale), qualsiasi spazio dei nomi dovrebbe essere dichiarato in un blocco. Quel blocco è la prima parte delle regioni probabilmente distribuite dello spazio dei nomi. Con il usando Direttiva, lo spazio dei nomi può essere esteso come regioni in altri ambiti. Spazi dei nomi le cui regioni sono unite non dovrebbero avere lo stesso nome variabile nei loro diversi blocchi di spazio dei nomi, poiché ciò causerebbe ancora il conflitto del nome.