C ++

C ++ nosaukumvieta

C ++ nosaukumvieta
Vārdamvieta C ++ ir vispārināta darbības joma. Tās deklarācija sākas ar rezervēto vārdu, nosaukumvietu, kam seko programmētāja izvēlētais nosaukums un pēc tam bloks iekavās. Bloks satur C ++ objektu, funkciju un citu entītiju pamatdeklarācijas un / vai definīcijas.

Apsveriet šādus divus skalāros paziņojumus globālā mērogā šādā programmā:

# iekļaut
izmantojot nosaukumvietu std;
int varId = 5;
pludiņš varId = 2.3;
int main ()

atgriešanās 0;

Mēģinājums sastādīt šo programmu noved pie sastādīšanas kļūdas. Ir divi mainīgie ar tādu pašu nosaukumu, varId. Lai gan tie ir divi dažādi mainīgie no diviem dažādiem veidiem, int un peldēt, sastādītājs noraida abas deklarācijas, jo tām ir viens nosaukums. Šī problēma atrisina šo problēmu, deklarējot mainīgos ar tādu pašu nosaukumu divās dažādās vispārinātās jomās:

# iekļaut
izmantojot nosaukumvietu std;
nosaukumvieta NA

int varId = 5;

nosaukumvieta NB

pludiņš varId = 2.3;

int main ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
atgriešanās 0;

Rezultāts ir šāds:

5
2.3

Iepriekš minētajā programmā ir divas nosaukumvietas: NA, kam ir vesela skaitļa definīcija, un NB, kam ir pludiņa definīcija, bet ar tādu pašu nosaukumu kā NA veselais skaitlis. Visbeidzot, palaižot programmu, tika izmantots viens un tas pats nosaukums diviem dažādiem mainīgajiem. Ņemiet vērā, ka, lai piekļūtu vienam un tam pašam divu dažādu mainīgo nosaukumam, jāizmanto nosaukumvietas īpašais nosaukums, kam seko kopējais identifikators. Vārdtelpas nosaukumu un kopējo identifikatoru atdala darbības jomas izšķiršanas operators “::.”Vārdvietu nosaukums atšķir objektus.

Šis raksts aptver nosaukumvietas pamatjēdzienu un tā lietošanu C ++ programmēšanas valodā. Lai sekotu šim rakstam, jums vajadzētu būt pamatzināšanām par C ++ valodu. Jums vajadzētu būt arī zināšanām par C ++ darbības jomu, lai gan tas ir īsi izskaidrots šajā rakstā. Lai uzzinātu vairāk par C ++ darbības jomu, jebkura linuxhint meklēšanas lodziņā meklējiet frāzi “Scope in C ++” (bez pēdiņām).com tīmekļa lapu un nospiediet taustiņu Enter. Tas jūs novedīs pie raksta, kuru autors uzrakstīja.

Raksta saturs

Kas ir nosaukumvieta?

Deklaratīvais reģions ir lielākā programmas daļa, kurā ir derīgs entītijas (mainīgā) nosaukums. Šo reģionu sauc par darbības jomu. Vārdamvieta C ++ ir vispārināta darbības joma, kuras galvenais mērķis ir atrisināt vārdu konfliktus. Vārdtelpā ir pamatdeklarācijas un / vai entītiju definīcijas.

Globālā nosaukumvieta un tās problēma

Globālā nosaukumvieta ir globālā darbības joma. Apsveriet šādu īsu programmu:

# iekļaut
izmantojot nosaukumvietu std;
int ident = 55;
pludiņa identitāte = 12.17;
int main ()

atgriešanās 0;

Iepriekš minētajā programmā ir divi mainīgie, kurus abus sauc ident. Šie mainīgie ir globālā mērogā; tas ir, viņi atrodas globālajā nosaukumvietā. Mēģinājums sastādīt šo programmu neizdosies ar kļūdas ziņojumu. Globālajā tvērumā netiek pieņemti vairāk kā viens mainīgais ar tādu pašu nosaukumu, tāpēc ir nepieciešama pielāgota nosaukumvieta.

Pielāgota nosaukumvieta

Vārdtelpai nav tikai viena nosaukuma. Tā vietā vārdu telpā ir vārdu kopa, lai izvairītos no konfliktiem ar citām nosaukumu kopām. Lai izvairītos no konfliktiem zemākā kodā, pirms katra vārda norādiet nosaukumvietas nosaukumu un :: . Šī programma ilustrē to, izmantojot divas pielāgotas nosaukumvietas:

# iekļaut
izmantojot nosaukumvietu std;
nosaukumvieta NA

int varInt = 6;
pludiņš flt;

nosaukumvieta NB

int varInt = 7;
pludiņš 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';
atgriešanās 0;

Rezultāts ir:

6
7
2.5
4.8

Ņemiet vērā, ka nosaukumi NA :: flt un NB :: flt galu galā ir definēti galvenais () funkciju. C ++ nepieļauj šādu definīciju globālā mērogā.

Ņemiet vērā, ka pielāgotā nosaukumvieta ir ligzdota globālās nosaukumvietas nosaukumvieta.

Izmantojot direktīvu

Lai pēc nosaukumvietas deklarēšanas visu laiku nerakstītu “namepace :: name”, nevis tikai “name”, varat izmantot izmantojot direktīvu. Sintakse, lai izmantotu izmantojot direktīva ir šāda:

izmantojot nosaukumvietu Namespace_name;

The izmantojot direktīva nav priekšapstrādes direktīva, tāpēc tā beidzas ar semikolu (;).

Nākamā programma ilustrē programmas izmantošanu izmantojot direktīva un vairāk:

# iekļaut
izmantojot nosaukumvietu std;
nosaukumvieta NB

int varInt = 7;
int func ()

atgriezties varInt;


int fn ()

izmantojot nosaukumvietu NB;
int myVar2 = func ();
// seko citi objekti un funkcijas no NB.
atgriezt myVar2;

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

cout << fn() << " << myVar3 << '\n';
atgriešanās 0;

Šīs programmas rezultāts ir 7 7. Termiņš "izmantojot nosaukumvietu NB;”Ir ievietots fn () definīcija. The func () no NB nosaukumvietas tiek saukta tieši zem tā, bez iepriekšējāsNB ::.”

Mainīgais, kas deklarēts globālajā darbības jomā (globālā nosaukumvieta), tiek rādīts no deklarēšanas punkta līdz faila beigām. Tas ir redzams arī ligzdotajās nosaukumvietās (ligzdotās darbības jomās), piemēram, ligzdotajās fn () funkcijas darbības joma iepriekš. The izmantojot direktīva pievienojas nosaukumvietai no pozīcijas, kurā tā atrodas, līdz tās darbības jomas beigām, kurā tā atrodas.

Vārds func () no NB nosaukumvietas nevar redzēt zem fn () definīciju, jo “izmantojot nosaukumvietu NB; ” tika ievietots funkcijas darbības sfērā (bloks). Saskaņā ar šo nosacījumu izmantotfunc ()”Ārpus NB nosaukumvietas bloka (darbības joma), pirms tā ir jābūt“NB ::,”, Kā norādīts šajā paziņojumā:

int myVar3 = NB :: func ();

The izmantojot direktīva savieno savu nosaukumvietu ar ārējo ligzdojošo nosaukumvietu no vietas, kurā tā atrodas, līdz ārējās ligzdošanas nosaukumvietas beigām. Nākamajā programmā NA nosaukumvieta ir apvienota ar globālo nosaukumvietu. Pēc tam abas nosaukumvietas paplašinās fn () funkciju definīcijas nosaukumvieta, kurā tie ir savienoti ar NB nosaukumvietu. NB nosaukumvieta beidzas fn () funkcijas definīcija un divas iepriekšējās nosaukumvietas turpinās līdz faila beigām (izlasiet kodu).

# iekļaut
izmantojot nosaukumvietu std;
nosaukumvieta NA

int varInt = 6;
int func ()

atgriezties varInt;


nosaukumvieta NB

int varInt = 7;
int func ()

atgriezties varInt;


izmantojot nosaukumvietu NA;
int myVar0 = varInt;
// seko citi :: un NB objekti un funkcijas.
int fn ()

int myVar1 = varInt;
izmantojot nosaukumvietu NB;
int myVar2 = NB :: func ();
// seko citi objekti un funkcijas no NB līdz šīs jomas beigām.
atgriezt myVar1 + myVar2;

// Seko tikai objekti un funkcijas no :: un NB.
int myVar3 = NB :: func ();
int main ()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
atgriešanās 0;

Rezultāts ir 6, 13, 7.

Piezīme: Globālā nosaukumvieta ir apzīmēta ar :: , kas nozīmē, ka pirms darbības jomas izšķiršanas operatora nekas nav sekojošs.

Zem paziņojuma tiek parādītsizmantojot nosaukumvietu NA;”Mainīgos no globālās un NA nosaukumvietas var izmantot, nenorādot to avotu nosaukumvietu. Nākamajā paziņojumā tiek izmantots varInt no NA nosaukumvietas. Apvienotais globālais un NA nosaukumvietas reģions paplašinās fn () funkciju nosaukumvieta. Tātad, varInt pirmā paziņojuma fn () funkcijas darbības joma ir NA nosaukumvieta.

Tā kā pasaules un NA nosaukumvietas reģions paplašinās visā fn () darbības joma pēcint myVar2 = NB :: func ();,Jebkuru nosaukumu no NB nosaukumvietas var izmantot tikai fn () darbības jomu, pirms tās nenorādot ar “NB ::,”Tikai tad, ja tas nenotika NA un globālajās nosaukumvietās (blokos). Pretējā gadījumā pirms tā jābūtNB ::.Apvienoto NA un globālo vārdu vietu reģions turpinās zem fn () definīciju un galvenais () funkciju līdz faila beigām.

NB nosaukumvietas paplašinājums sākas ar “int myVar2 = NB :: func ();" iekš fn () bloķēt un beidzas fn () definīcijas bloks.

Piezīme: Vārdvietām, kuru reģioni ir savienoti, to atšķirīgajos nosaukumvietas blokos nedrīkst būt viens un tas pats mainīgā nosaukums, jo tas joprojām izraisītu konfliktu.

Vārdvietas reģioni

Vārdamvieta ir darbības joma. Bez globālās nosaukumvietas (globālā darbības joma) jebkura nosaukumvieta ir jādeklarē blokā. Šis bloks ir nosaukumvietas, iespējams, izplatīto reģionu pirmā daļa. Izmantojot direktīvu, nosaukumvietu var paplašināt kā reģionus citās jomās.

Tiek teikts, ka entītijas, kas deklarētas nosaukumvietas pamattekstā, ir nosaukumvietas locekļi, un nosaukumi, kurus ar šīm deklarācijām ievieš deklarācijas nosaukumvietas reģionā, ir nosaukumvietas locekļu vārdi.

Ligzdotas nosaukumvietas

Šī programma parāda ligzdotās nosaukumvietas:

# iekļaut
izmantojot nosaukumvietu std;
nosaukumvieta A

int i = 1;
nosaukumvieta B

int i = 2;
nosaukumvieta C

int i = 3;



int main ()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
atgriešanās 0;

Rezultāts ir:

1 2 3

Ievērojiet, ka trim vērtībām ir piekļuvis, izmantojot darbības jomas izšķirtspējas operatoru.

Standarta nosaukumvieta

C ++ ir bibliotēka, ko sauc par standarta bibliotēku. Objektu, funkciju un citu entītiju nosaukumi šajā bibliotēkā ir no nosaukumvietas, ko sauc par standarta nosaukumvietu, kas rakstīta kā std. Standarta bibliotēkā ir apakšbibliotēkas, un viena no šīm apakšbibliotēkām ir iostream. The iostream bibliotēkā ir objekts cout, ko izmanto rezultātu nosūtīšanai uz konsoli (termināli).

Vārds cout jābūt std nosaukumvieta. Izmantot iostream ar to std vārdam, programmai jābūt šādai:

# iekļaut
izmantojot nosaukumvietu std;

Ievērojiet izmantojot direktīva un std. Termiņš "# iekļaut ”Ir priekšapstrādes direktīva un nebeidzas ar semikolu. Tas ietver iostream “failu” tās direktīvas pozīcijā.

Secinājums

Vārdamvieta ir darbības joma. Vārdtelpas apraksts (definīcija) satur C ++ objektu, funkciju un citu entītiju pamatdeklarācijas un / vai definīcijas. Ārpus nosaukumvietas definīcijas nosaukumam var piekļūt, izmantojot sintaksi “namespaceName :: nosaukums.”Izņemot globālo nosaukumvietu (globālo tvērumu), jebkura nosaukumvieta ir jādeklarē blokā. Šis bloks ir nosaukumvietas, iespējams, izplatīto reģionu pirmā daļa. Ar izmantojot direktīvu, nosaukumvietu var paplašināt kā reģionus citās jomās. Vārdvietām, kuru reģioni ir savienoti, to atšķirīgajos nosaukumvietas blokos nedrīkst būt viens un tas pats mainīgā nosaukums, jo tas joprojām izraisīs nosaukumu konfliktu.

Chrys

5 labākie ergonomiskie datoru peles izstrādājumi Linux
Vai ilgstoša datora lietošana izraisa sāpes plaukstas locītavā vai pirkstos? Vai jūs ciešat no stīvām locītavām un jums pastāvīgi ir jāspiež rokas? Va...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Izmantojot X-Mouse Button Control, atšķirīgi mainiet peles pogas atšķirīgai programmatūrai
Varbūt jums ir nepieciešams rīks, kas varētu mainīt peles vadību ar katru lietoto lietojumprogrammu. Ja tas tā ir, varat izmēģināt lietojumprogrammu a...