C++

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, namespace, seguita da un nome a scelta del programmatore e quindi dal blocco tra parentesi graffe. Il blocco contiene dichiarazioni di base e/o definizioni di oggetti, funzioni e altre entità C++.

Considera le seguenti due istruzioni scalari in un ambito globale, nel seguente programma:

#includere
usando lo spazio dei nomi std;
int varId = 5;
variabile variabile = 2.3;
intero principale()

restituisce 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 variabili diverse di due tipi diversi, int e galleggiante, il compilatore rifiuta le due dichiarazioni perché hanno lo stesso nome. Il seguente programma risolve questo problema dichiarando le variabili con lo stesso nome in due diversi ambiti generalizzati:

#includere
usando lo spazio dei nomi std;
spazio dei nomi NA

int varId = 5;

spazio dei nomi NB

variabile variabile = 2.3;

intero principale()

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

L'output è il seguente:

5
2.3

Ci sono due namespace nel programma sopra: N / A, che ha la definizione di intero, e NB, che ha la definizione di float ma con lo stesso nome dell'intero per NA. Infine, quando il programma è stato eseguito, è stato utilizzato lo stesso nome per due diverse variabili. Si noti che per accedere allo stesso nome di due variabili diverse, deve essere utilizzato 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 dei namespace differenzia 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 del C++, sebbene sia spiegato brevemente in questo articolo. Per saperne di più sull'ambito C++, cerca la frase "Scope in C++" (senza virgolette) nella casella di ricerca di qualsiasi linuxhint.com pagina web e premi Invio. Questo ti porterà all'articolo scritto da questo autore.

Contenuto dell'articolo

Che 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 ambito. Uno spazio dei nomi in C++ è un ambito generalizzato il cui scopo principale è risolvere i conflitti di nomi. Uno spazio dei nomi ha dichiarazioni di base e/o definizioni di entità.

Spazio dei nomi globale e il suo problema

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

#includere
usando lo spazio dei nomi std;
int ident = 55;
ident float = 12.17;
intero principale()

restituisce 0;

Nel programma sopra, ci sono due variabili, entrambe chiamate identità. Queste variabili sono nell'ambito globale; cioè, sono nello spazio dei nomi globale. 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 personalizzato

Uno spazio dei nomi non ha un solo nome. Invece, uno spazio dei nomi ha un insieme di nomi per evitare conflitti con altri insiemi di nomi. Per evitare conflitti nella parte inferiore del codice, precedere ogni nome con il nome dello spazio dei nomi e :: . Il seguente programma illustra ciò utilizzando due spazi dei nomi personalizzati:

#includere
usando lo spazio dei nomi std;
spazio dei nomi NA

int varInt = 6;
galleggiante piatto;

spazio dei nomi NB

int varInt = 7;
galleggiante piatto;

intero principale()

cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
NA::flt = 2.5;
NB::flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
restituisce 0;

L'uscita è:

6
7
2.5
4.8

Nota che i nomi NA::flt e NB::flt sono stati infine definiti nel principale() funzione. Il C++ non consente tale definizione nell'ambito globale.

Nota che lo spazio dei nomi personalizzato è uno spazio dei nomi nidificato per lo spazio dei nomi globale.

La direttiva di utilizzo

Per evitare di digitare sempre "namepace::name" invece di "name" dopo aver dichiarato lo spazio dei nomi, è possibile utilizzare il usando direttiva. La sintassi per usare il usando direttiva è la seguente:

utilizzando lo spazio dei nomi Namespace_name;

Il usando non è una direttiva per il preprocessore, quindi termina con un punto e virgola (;).

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

#includere
usando lo spazio dei nomi std;
spazio dei nomi NB

int varInt = 7;
int funzione ()

return varInt;


int fn()

utilizzando lo spazio dei nomi NB;
int miaVar2 = func();
// seguono altri oggetti e funzioni da NB.
restituisce myVar2;

int miaVar3 = NB::func();
intero principale()

cout << fn() << " << myVar3 << '\n';
restituisce 0;

L'output di questo programma è 7 7. Il termine "utilizzando lo spazio dei nomi NB;” è stato posizionato all'inizio del fn() definizione. Il funzione() dallo spazio dei nomi NB viene chiamato appena sotto, senza precedere con "NB::."

Una variabile dichiarata nell'ambito globale (spazio dei nomi globale) è vista dal punto di dichiarazione alla fine del file. Si vede anche negli spazi dei nomi annidati (ambiti annidati), come annidati fn() ambito della funzione sopra. Il usando La direttiva unisce il suo spazio dei nomi dalla posizione in cui è posizionato alla fine dell'ambito in cui è posizionato.

Il nome funzione() dallo spazio dei nomi NB non può essere visto sotto il fn() definizione perché “utilizzando lo spazio dei nomi NB;” è stato inserito nell'ambito della funzione (blocco). In questa condizione, per usare "funzione()” fuori dal blocco namespace NB (scope), deve essere preceduto da “NB::,” come nella seguente dichiarazione:

int miaVar3 = NB::func();

Il usando la direttiva unisce il suo spazio dei nomi con lo spazio dei nomi di annidamento esterno dalla posizione in cui è posizionato alla fine dello spazio dei nomi di annidamento esterno. Nel seguente programma, lo spazio dei nomi NA è unito allo spazio dei nomi globale. Entrambi gli spazi dei nomi si estendono quindi nel fn() spazio dei nomi di definizione 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 i due spazi dei nomi precedenti continuano fino alla fine del file (leggere il codice).

#includere
usando lo spazio dei nomi std;
spazio dei nomi NA

int varInt = 6;
int funzione ()

return varInt;


spazio dei nomi NB

int varInt = 7;
int funzione ()

return varInt;


utilizzando lo spazio dei nomi NA;
int miaVar0 = varInt;
//altri oggetti e funzioni da :: e NB seguono.
int fn()

int miaVar1 = varInt;
utilizzando lo spazio dei nomi NB;
int miaVar2 = NB::func();
// seguono altri oggetti e funzioni da NB, fino alla fine di questo ambito.
restituisce miaVar1 + miaVar2;

//Seguono solo oggetti e funzioni da :: e NB.
int miaVar3 = NB::func();
intero principale()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
restituisce 0;

L'uscita è 6, 13, 7.

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

Sotto il comunicato, il “utilizzando lo spazio dei nomi NA;” le variabili degli spazi dei nomi globale e NA possono essere utilizzate senza l'indicazione del loro spazio dei nomi di origine. La prossima affermazione usa il varInt dello spazio dei nomi di NA. La regione dello spazio dei nomi combinata globale e NA si estende nel fn() spazio dei nomi della funzione. Così il varInt della prima affermazione in fn() l'ambito della funzione, è dello spazio dei nomi NA.

Poiché la regione per gli spazi dei nomi globale e NA si estende in tutto il fn() ambito, dopo il “int miaVar2 = NB::func();,” qualsiasi nome dallo spazio dei nomi NB può essere utilizzato solo nel in fn() ambito senza precederlo con "NB::," solo se non si è verificato negli spazi dei nomi NA e globali (blocchi). In caso contrario, dovrebbe essere preceduto da "NB::.” La regione degli spazi dei nomi combinati per NA e globale continua sotto il fn() definizione e nel principale() funzione fino alla fine del file.

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

Nota: Gli spazi dei nomi le cui regioni sono unite non dovrebbero avere lo stesso nome di variabile nei loro diversi blocchi di spazi dei nomi, poiché ciò causerebbe comunque conflitti.

Regioni dello spazio dei nomi

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

Le entità dichiarate in un corpo dello spazio dei nomi sono dette membri dello spazio dei nomi e i nomi introdotti da queste dichiarazioni nella regione dichiarativa dello spazio dei nomi sono detti nomi membri dello spazio dei nomi.

Spazi dei nomi nidificati

Il seguente programma mostra gli spazi dei nomi nidificati:

#includere
usando lo spazio dei nomi std;
spazio dei nomi A

int io = 1;
spazio dei nomi B

int io = 2;
spazio dei nomi C

int io = 3;



intero principale()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
restituisce 0;

L'uscita è:

1 2 3

Si noti che è stato possibile accedere ai tre valori utilizzando l'operatore di risoluzione dell'ambito.

Spazio dei nomi standard

C++ ha una libreria chiamata libreria 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 standard. La libreria standard contiene sotto-librerie e una di queste sotto-librerie è iostream. Il iostream la libreria contiene l'oggetto cout, che viene utilizzato per inviare i risultati alla console (terminale).

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

#includere
usando lo spazio dei nomi std;

Notare l'uso del usando direttiva e standard. Il termine "#includere ” è una direttiva per il preprocessore e non termina con un punto e virgola. Include il "file" iostream nella posizione della sua direttiva.

Conclusione

Uno spazio dei nomi è un ambito. La descrizione dello 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::name.” A parte lo spazio dei nomi globale (ambito globale), qualsiasi spazio dei nomi dovrebbe essere dichiarato in un blocco. Quel blocco è la prima parte delle regioni possibilmente distribuite dello spazio dei nomi. Con il usando direttiva, lo spazio dei nomi può essere esteso come regioni in altri ambiti. Gli spazi dei nomi le cui regioni sono unite non dovrebbero avere lo stesso nome di variabile nei loro diversi blocchi di spazi dei nomi, poiché ciò causerebbe comunque un conflitto di nomi.

cris

I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...
Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...