Kezdőoldal » Számítástechnika » Programozás » C++ programnyelvben mi az a...

C++ programnyelvben mi az a namespace?

Figyelt kérdés
Úgy gondolom köze van ahhoz, hogy a C++ programnyelv nem veszi figyelembe a szóközöket illetve helykihagyásokat. Ezzel is úgymond rövidebb kódot lehet írni. De ez csak egy tipp. Azt sem tudom, hogyha a namespace után az std helyett mást írok, akkor az miben fogja befolyásolni a kódot. Nem lesz olyan rövid? Lassabban fog lefutni? Az üres sorok is lassítani fogják a program futását? Nyilván van több namespace, nem csak std (hiszen akkor nem kéne külön megnevezés rá), ezek mind mást tudnak?
2020. máj. 22. 21:51
 1/5 anonim ***** válasza:
83%

A névtér a logikailag összetartozó entitások (típusok, függvények, változók...) gyűjtemény. Egy azonosítóval ellátott, a globálisnál szűkebb hatókor.

Semmi köze a whitespace karakterekhez meg az üres sorokhoz, azokat a preprocesszor úgyis kiszedi.

2020. máj. 22. 22:09
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
83%
Ha std helyett mást írsz, akkor az std névtérben definiált entitásokat csak teljes nevükön érheted el.
2020. máj. 22. 22:11
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
78%

A namespace ami magyarul névtér, az biztosítja az egyértelműséget függvényhívás esetén. Ezt úgy éri el, hogy szinte minden beépített függvény egy névtér része (többnyire az std (=standard) névtéré). Te is létre tudsz hozni névtereket, illetve ha osztályt hozol létre, az is névtérként működik.

Ennek eredményeképp vegyük például az alábbi esetet: létezik például std::string szövegtípus. Ha using-gal meghívod, vagy a teljes névteret megnyitod neki, akkor std::string helyett csak string-et kell írnod.

Viszont mi történik, ha egy saját string nevű típust/osztályt akarsz használni, és nem akarod máshogy nevezni? Akkor azt beteszed egy másik névtérbe, és úgy hivatkozol rá. Például sajat::string

VISZONT!! Ha ütközés van, akkor nem fordul le a kód, mert nem tudja eldönteni, mit használjon: ilyen eset, ha van a kódban "using namespace std;" és "using namespace sajat;" is. Ekkor nem lehet olyat, hogy string szoveg; ,mert nem tudja osztályhoz kötni. Ilyenkor jelölni kell, melyik névtér string típusát akarod használni, azaz kiírod a scope-ját (sajat::string vagy std::string)

2020. máj. 22. 23:28
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
78%
Példa, hogy érthetőbb legyen. Tegyük fel, hogy két, különböző f() függvényt akarsz. Ilyen esetben a fordító honnan is tudná, hogy melyiket akarod használni? Sehonnan, hibát is ad, hacsak nincsenek külön névtérben. Az egyiket berakod az 'a' a másikat a 'b' névtérbe. Ahol meghívod, ott eldöntöd, hogy az a-beli (a::f()) vagy a b-beli(b::f()) függvényt akarod használni. Ha nem akarod kiírni elé a névteret, akkor írsz egy ilyet: 'using namespace a;'. Így ha az adott egységen belül a fordító f()-et lát, tudja, hogy te a::f()-re gondoltál.
2020. máj. 22. 23:29
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Értem már, köszönöm szépen a válaszokat.
2020. máj. 23. 14:50

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!