Kezdőoldal » Számítástechnika » Programozás » C++ ban mikre lehet használni...

C++ ban mikre lehet használni a const kulcsszót?

Figyelt kérdés

Az alapesetet tudom, hogy van egy konstansom, és akkor mondjuk a 3.14 helyett lehet mindig pi-t irni. De mit jelent hogy egy függvényben konstans referencia szerint adunk át pl egy vektort? Azt értem h azért referencia, hogy ne másoljuk le az egész vektort, de mit jelent itt a konstans. Illetve van, hogy csak valami függvény után a paraméterei után már a zárójelen kívül oda van írva a sor végére a const. int fv(int a, int b) const {...}

Ez mit jelent és mikor kell használni? Illetve ezeken kívül milyene esetekben és hogy használandó a const?


Elöre is köszönöm!



2016. dec. 5. 17:51
 1/5 anonim ***** válasza:
2016. dec. 5. 17:58
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
100%

Húha. Alapvetően a const a konstans, vagyis állandó jelölése. Ami konstans, annak az értéke nem változtatható meg. Ez a fordító számára is egyfajta optimalizációt tesz lehetővé, ha tudja, hogy egy adott érték nem változik, valamint fejlesztés során is hasznos, ha besípol a kódunk, ha olyasmit akarunk változtatni, amit nem kéne.


Az, hogy a const kulcsszót hova tesszük megváltoztatja a jelentését. Alapvetően a const kulsszó a tőle balra levő kulcsszót helyezi konstans szintre, illetve ha a kifejezés elején van, akkor a jobbra levőt. Így képzeld el:


const int * RandomMethod(int i, double c);

- Konstans int értékre mutató pointert visszaadó metódus. (const a kifejezés elején van, ezért az 'int'-re vonatkozik a konstans, vagyis a visszaadott int értékre. A pointer értékét megváltoztathatod, de a mutatott értéket nem)


int const * RandomMethod(int i, double c);

- Szintén, csak itt már a const a baloldalt teszi konstanssá.


int * const RandomMethid(int i, double c);

- Int típusú értékre mutató konstans pointer (az értéket megváltoztathatod, de a pointert nem)


int * RandomMethod const(int i, double c);

- Ilyen nincs :D


int * RandomMethod(const int i, double c);

-Int pointer visszaadó metódus, aminek az első paramétere konstans int érték.


és végül:

int * RandomMethod(int i, double c) const;

- Na ez egy picit tricky. Ez egy konstans metódus, ami szigorúan véve annyit tesz, hogy a az objektum this* pointere const this* lesz. Ez konyhanyelven azt jelenti, hogy a const metódusok nem módosíthatják az adatszerkezetet. Tehát a metódus konstans abból a szempontból, hogy az objektum a metódus futása során változatlan marad.

2016. dec. 5. 22:33
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
Köszönöm szépen a válaszokat! Hasznosak a linkek is és a kifejtett válasz is! :)
2016. dec. 6. 08:02
 4/5 anonim ***** válasza:

Egy apróság kimaradt:


"int * const RandomMethid(int i, double c);

- Int típusú értékre mutató konstans pointer (az értéket megváltoztathatod, de a pointert nem)"


Ennek a szignatúrának nincs értelme. Nem hibás, csak értelmetlen, függvényből ugyanis nincs értelme konstans pointert visszaadni. Ennek az oka az, hogy amikor visszatérsz egy pointerrel, akkor egy másolatot adsz vissza a pointerról, és a visszaadott pointer kizárólag rvalue lehet, azaz jobboldali érték. Ez azt jelenti, hogy értékadásoknak kizárólag a jobboldalán szerepelhet, így a maga módján eleve konstans lesz.


Ugyanúgy nincs sok értelme primitív típust konstansként vissszaadni, ugyanezen okból:

const int RandomMethod();


Ugyanis ezt semmilyen esetben nem tudod megcsinálni:

RandomMethod() = 4;



Viszont ha saját típust hozol létre, ott már lehet értelme constot visszaadni, ugyanis saját típusra megcsinálható a következő:


struct RandomType{}


RandomType RandomMethod() { return RandomType() }


int main()

{

      RandomMethod = RandomType();

}


viszont ha const RandomType a visszatérési érétk, akkor erre már hibát kapsz.

2016. dec. 6. 08:47
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Viszont egyszerű változóként használhatsz konstans pointert:


int randomNumber = 4;

int moreRandomNumber = 3;


int * const SomePointer = &randomNumber;


*SomePointer = 8; //valid

SomePointer = &moreRandomNumber //nem valid, hibát dob.

2016. dec. 6. 08:50
Hasznos számodra ez a válasz?

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

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!