C ++

Imenski prostor C ++

Imenski prostor C ++
Imenski prostor v jeziku C ++ je splošen obseg. Njegova izjava se začne z rezervirano besedo, imenskim prostorom, sledi ime po izbiri programerja in nato blok v oklepajih. Blok vsebuje osnovne deklaracije in / ali definicije objektov, funkcij in drugih entitet C ++.

Upoštevajte naslednja dva skalarna stavka v splošnem obsegu v naslednjem programu:

#include
uporaba imenskega prostora std;
int varId = 5;
float varId = 2.3;
int main ()

vrnitev 0;

Poskus prevajanja tega programa vodi do napake pri prevajanju. Obstajata dve spremenljivki z istim imenom, VarId. Čeprav gre za dve različni spremenljivki dveh različnih vrst, int in plovec, prevajalnik zavrne obe izjavi, ker imata isto ime. Naslednji program to težavo reši tako, da spremenljivke z istim imenom razglasi v dveh različnih splošnih področjih:

#include
uporaba imenskega prostora std;
imenski prostor NA

int varId = 5;

imenski prostor NB

float varId = 2.3;

int main ()

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

Rezultat je naslednji:

5
2.3

V zgornjem programu sta dva imenska prostora: NA, ki ima opredelitev celega števila in Opomba:, ki ima definicijo float, vendar z enakim imenom kot celo število za NA. Na koncu je bilo ob zagonu programa uporabljeno isto ime za dve različni spremenljivki. Upoštevajte, da je treba za dostop do istega imena dveh različnih spremenljivk uporabiti določeno ime za imenski prostor, ki mu sledi skupni identifikator. Ime imenskega prostora in skupni identifikator ločuje operater ločljivosti obsega, “::.”Ime imenskih prostorov bo razlikovalo predmete.

Ta članek zajema osnovni koncept imenskega prostora in njegovo uporabo v programskem jeziku C ++. Če želite slediti temu članku, morate imeti osnovno znanje jezika C ++. Morali bi tudi poznati področje uporabe C ++, čeprav je na kratko razloženo v tem članku. Če želite izvedeti več o obsegu C ++, poiščite besedno zvezo »Obseg v C ++« (brez narekovajev) v iskalnem polju katerega koli linuxhint.com in pritisnite Enter. To vas bo pripeljalo do članka, ki ga je napisal ta avtor.

Vsebina članka

Kaj je imenski prostor?

Deklarativna regija je največji del programa, v katerem je veljavno ime entitete (spremenljivke). Ta regija se imenuje obseg. Imenski prostor v jeziku C ++ je splošen obseg, katerega glavni namen je reševanje konfliktov imen. Imenski prostor ima osnovne deklaracije in / ali definicije entitet.

Globalni imenski prostor in njegov problem

Globalni imenski prostor je globalni obseg. Upoštevajte naslednji kratek program:

#include
uporaba imenskega prostora std;
int ident = 55;
float ident = 12.17;
int main ()

vrnitev 0;

V zgornjem programu sta dve spremenljivki, imenovani obe ident. Te spremenljivke so v splošnem obsegu; torej so v globalnem imenskem prostoru. Poskus prevajanja tega programa ne bo uspel s sporočilom o napaki. Globalni obseg ne sprejema več kot ene spremenljivke z istim imenom, zato je potreben imenski prostor po meri.

Imenski prostor po meri

Imenski prostor nima samo enega imena. Namesto tega ima imenski prostor nabor imen, da se prepreči navzkrižje z drugimi nabori imen. Da se izognete konfliktu nižje v kodi, pred vsakim imenom navedite ime imenskega prostora in :: . Naslednji program to ponazarja z uporabo dveh imenskih prostorov po meri:

#include
uporaba imenskega prostora std;
imenski prostor NA

int varInt = 6;
float flt;

imenski prostor NB

int varInt = 7;
float flt;

int main ()

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

Rezultat je:

6
7
2.5
4.8

Upoštevajte, da imena NA :: flt in Opomba: flt so bili na koncu opredeljeni v glavni () funkcijo. C ++ take opredelitve v globalnem obsegu ne dovoljuje.

Upoštevajte, da je imenski prostor po meri ugnezdeni imenski prostor za globalni imenski prostor.

Direktiva o uporabi

Če želite po deklaraciji imenskega prostora ves čas namesto samo „name“ tipkati „namepace :: name“, lahko uporabite uporabo direktive. Sintaksa za uporabo uporabo Direktiva je naslednja:

z uporabo imenskega prostora Namespace_name;

The uporabo direktiva ni predprocesorska direktiva, zato se konča s podpičjem (;).

Naslednji program ponazarja uporabo uporabo direktive in še več:

#include
uporaba imenskega prostora std;
imenski prostor NB

int varInt = 7;
int func ()

vrni varInt;


int fn ()

z uporabo imenskega prostora NB;
int myVar2 = func ();
// sledijo drugi predmeti in funkcije iz NB.
vrni myVar2;

int myVar3 = NB :: func ();
int main ()

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

Rezultat tega programa je 7 7. Izraz "z uporabo imenskega prostora NB;"Je bilo postavljeno na začetek fn () opredelitev. The func () iz imenskega prostora NB se prikliče tik pod tem, ne da bi pred temOpomba ::."

Spremenljivka, deklarirana v globalnem obsegu (globalni imenski prostor), je vidna od točke deklaracije do konca datoteke. Prav tako je viden v ugnezdenih imenskih prostorih (ugnezdeni obsegi), kot je ugnezdeni fn () zgoraj. The uporabo direktiva združi svoj imenski prostor od položaja, na katerem je postavljen, do konca obsega, v katerega je postavljena.

Ime func () iz imenskega prostora NB ni mogoče videti pod fn () opredelitev, ker „z uporabo imenskega prostora NB; " je bilo umeščeno v obseg funkcije (blok). Pod tem pogojem je treba uporabitifunc ()"Zunaj bloka (področja) imenskega prostora NB mora biti pred"Opomba ::,"Kot v naslednji izjavi:

int myVar3 = NB :: func ();

The uporabo direktiva združi svoj imenski prostor z zunanjim imenskim prostorom za gnezdenje od položaja, kjer je postavljen, do konca imenskega prostora za gnezdenje. V naslednjem programu je imenski prostor NA združen z globalnim imenskim prostorom. Oba imenska prostora se nato razširita v fn () imenski prostor definicije funkcije, v katerem so združeni z imenskim prostorom NB. Imenski prostor NB se konča na koncu fn () definicijo funkcije, dva prejšnja imenska prostora pa se nadaljujeta do konca datoteke (preberite kodo).

#include
uporaba imenskega prostora std;
imenski prostor NA

int varInt = 6;
int func ()

vrni varInt;


imenski prostor NB

int varInt = 7;
int func ()

vrni varInt;


z uporabo imenskega prostora NA;
int myVar0 = varInt;
// sledijo drugi predmeti in funkcije iz :: in NB.
int fn ()

int myVar1 = varInt;
z uporabo imenskega prostora NB;
int myVar2 = NB :: func ();
// drugi predmeti in funkcije iz NB sledijo do konca tega obsega.
vrni myVar1 + myVar2;

// Sledijo samo predmeti in funkcije iz :: in NB.
int myVar3 = NB :: func ();
int main ()

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

Izhod je 6, 13, 7.

Opomba: Globalni imenski prostor je označen z :: , kar pomeni, da pred operaterjem ločljivosti obsega ni ničesar, kar sledi.

Pod izjavo je napis „z uporabo imenskega prostora NA;”Spremenljivke iz globalnega imenskega prostora in NA lahko uporabite brez navedbe njihovega izvornega imenskega prostora. Naslednji stavek uporablja varInt imenskega prostora NA. Globalno in NA kombinirano področje imenskega prostora se razteza v fn () imenski prostor funkcije. Torej varInt prve izjave v fn () obseg funkcije, je imenskega prostora NA.

Ker se regija za globalni in NA imenski prostor razteza po celotnem območju fn () področje uporabe, point myVar2 = NB :: func ();,"Katero koli ime iz imenskega prostora NB se lahko uporablja samo v fn () obsega, ne da bi pred temOpomba ::,"Samo, če se ni pojavil v NA in globalnih imenskih prostorih (blokih). V nasprotnem primeru mora biti predOpomba ::.”Območje kombiniranih imenskih prostorov za NA in global se nadaljuje pod fn () opredelitev in v glavni () do konca datoteke.

Razširitev imenskega prostora NB se začne od »int myVar2 = NB :: func ();"V fn () blok in se konča na koncu fn () definicijski blok.

Opomba: Imenski prostori, katerih regije so združene, ne bi smeli imeti enakega imena spremenljivke v svojih različnih blokih imenskega prostora, saj bi to še vedno povzročalo konflikt.

Regije imenskega prostora

Imenski prostor je obseg. Razen globalnega imenskega prostora (globalni obseg) je treba kateri koli imenski prostor prijaviti v bloku. Ta blok je prvi del možno porazdeljenih regij imenskega prostora. Z direktivo using lahko imenski prostor razširimo kot regije v drugih področjih.

Entitete, prijavljene v telesu imenskega prostora, naj bi bile člani imenskega prostora, imena, ki jih te deklaracije vnesejo v deklarativno območje imenskega prostora, pa naj bi bila imena članov imenskega prostora.

Vgnezdeni imenski prostori

Naslednji program prikazuje ugnezdene prostore imen:

#include
uporaba imenskega prostora std;
imenski prostor A

int i = 1;
imenski prostor B

int i = 2;
imenski prostor C

int i = 3;



int main ()

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

Rezultat je:

1 2 3

Upoštevajte, da so bile tri vrednosti dostopne z operaterjem ločljivosti obsega.

Standardni imenski prostor

C ++ ima knjižnico, imenovano standardna knjižnica. Imena predmetov, funkcij in drugih entitet v tej knjižnici so iz imenskega prostora, ki se imenuje standardni imenski prostor in je zapisan kot std. Standardna knjižnica vsebuje podknjižnice in ena od teh pod knjižnic je iostream. The iostream knjižnica vsebuje predmet cout, ki se uporablja za pošiljanje rezultatov na konzolo (terminal).

Ime cout mora biti v std imenski prostor. Uporabiti iostream s svojim std imenski prostor, mora biti program naslednji:

#include
uporaba imenskega prostora std;

Upoštevajte uporabo uporabo direktivo in std. Izraz "#include "Je predprocesorska direktiva in se ne konča s podpičjem. Vključuje datoteko iostream na mestu njene direktive.

Zaključek

Imenski prostor je obseg. Opis (definicija) imenskega prostora vsebuje osnovne deklaracije in / ali definicije objektov, funkcij in drugih entitet C ++. Zunaj definicije imenskega prostora je do imena mogoče dostopati s sintakso, “namespaceName :: name.”Poleg globalnega imenskega prostora (globalni obseg) je treba kateri koli imenski prostor prijaviti v bloku. Ta blok je prvi del možno porazdeljenih regij imenskega prostora. Z uporabo Direktivo lahko imenski prostor razširimo kot regije v drugih področjih. Imenski prostori, katerih regije so združene, ne bi smeli imeti enakega imena spremenljivke v svojih različnih blokih imenskega prostora, saj bi to še vedno povzročalo konflikt imen.

Chrys

Brezplačni in odprtokodni igralni mehanizmi za razvoj iger Linux
Ta članek bo zajemal seznam brezplačnih in odprtokodnih igralnih mehanizmov, ki jih je mogoče uporabiti za razvoj 2D in 3D iger v Linuxu. Obstaja veli...
Vadnica Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider je dvanajsti dodatek k seriji Tomb Raider - franšiza akcijsko-pustolovskih iger, ki jo je ustvaril Eidos Montreal. Kritiki i...
Kako povečati FPS v Linuxu?
FPS pomeni Število sličic na sekundo. Naloga FPS je merjenje hitrosti sličic pri predvajanju video posnetkov ali igranih predstavah. Z enostavnimi bes...