C++-ban pontosan mit nevetünk egy változó deklarálásának?
Amikor létrehozzuk? Pl. int b;
Vagy amikor azt jelöljük, hogy egy külső fájlban lesz létrehozva? extern int b;
(Én mindezidáig úgy tudtam, hogy a fentebbi lehetőség, ámde egy fórumon sikeresen összezavartak :) )
A deklarálás az amikor jelezzük a fordítónak hogy létezik egy változó/függvény. A definiálás az, amikor a változó/függvény explicit vagy implicit de kap valamilyen értéket (lehet ez memóriaszemét is), azaz fizikailag is elkezd létezni valahol.
Az int b; deklarál és definiál is, azaz a "b" innentől létezik a fordító számára is, és tartozik hozzá egy memóriacím vagy regiszter ahova beírhatunk valamilyen értéket..
Az extern int b; csak deklarál egy "b"-t, azaz megmondja a fordítónak hogy van egy "b" nevű int típusú változónk, ami vagy létezik valahol vagy nem, az majd linkeléskor fog kiderülni. Nem definiáljuk, számítunk arra hogy a definiálást majd valaki más elvégzi valamelyik másik forrásban.
Deklarálás - ahogy írták, jelzés a fordítónak, hogy létezik a változó, függvény, osztály, akármi. A deklarálás nem foglalja magában a memóriaterület lefoglalását, illetve érték beállítását.
Példa: extern int i; //jelöljük, hogy i egy létező változó, de nincs neki memóriacím lefoglalva.
Definiálás - Amikor értelmet adsz a létrehozott elemnek. Ez nem kifejezetten az, hogy értéket adsz a változódnak, inkább csak memóriaterületet foglalsz le neki. Ebből fakadóan implicit módon értéke is lesz a változónak, vagy az ami a neki lefoglalt memóriaterületen éppen található, vagy konstruktorban meghatározott default érték.
Példa: int i; //jelezzük i létezését, és egyúttal memóriaterületet is kap, innentől kezdve bármikor elérjük az értékét, és módosíthatjuk azt.
És van még az inicializálás, ami explicit módon történő kezdőérték adást jelöl. Nyilván egy inicializálás során, vagy az előtt deklarálod és definiálod is a változódat.
pl. int i = 5; //i-t itt nem csak létrehozzuk, és memóriaterületet foglalunk neki, de közvetlen módon egy kezdőértéket is adunk neki. (Noha = jelet használunk, ez a C++-ban nem értékadás, hanem egy paraméterezett konstruktor (copy constructor))
„pontosan mit nevetünk...”
int hihi;
extern char hehehe;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!