Kezdőoldal » Számítástechnika » Programozás » Akkor most ez mit is jelent a...

Isaac42 kérdése:

Akkor most ez mit is jelent a programozásban? (C++)

Figyelt kérdés

// const member function

int get() const {return x;}


// member function returning a const&

const int& get() {return x;}


// const member function returning a const&

const int& get() const {return x;}


------------------------------------------


Azt értem, hogy az elsőnél a const azt jelenti, hogy a függvény nem fog semmilyen értéket módosítani, a másodikat viszont nem értem teljesen...


Akkor most egy konstans értéket ad vissza, ráadásul annak is a memóriacímét, mivel ott van a & operátor.


A harmadik pedig a kettő az egyben.

De akkor most mit is ad vissza a második? Mert sima cout-tal kiíratták a visszaadott értéket, pedig a & alapján egy memóriacímnek kellene lennie.



#programozás #C++ #programozás tanulás #tagmetódusok #visszaadási érték
2014. febr. 8. 20:00
 1/10 A kérdező kommentje:
Bocs, ha nagyon értetlen vagyok, de 100%-ig angolul van az oldal, így egy-két helyen nem értem teljesen a magyarázatot, de szerencsére a döntő többséget eddig meg tudtam érteni.
2014. febr. 8. 20:02
 2/10 iostream ***** válasza:
39%
A & nem azt jelenti, hogy memóriacím. Ha egy kifejezés elé írod, akkor valóban a "címe" operátort írod le. De itt egy változó deklarálás módosítója, és mint ilyen, azt jelenti, hogy referencia. Tehát egy const int referenciát adsz vissza.
2014. febr. 8. 20:24
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

Vagyis hivatkozok a változóra?

De miért kell rá hívatkozni, amikor így is úgy is az osztály tagváltozójának értékét adja vissza?

Vagy ezt az követeli meg, hogy konstansként deklaráltam a függvényt?

2014. febr. 8. 20:54
 4/10 iostream ***** válasza:
Nézz utána, mi az a referencia.
2014. febr. 8. 23:34
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
Tulajdonképpen az egésznek az az értelme, hogy ha van egy hihetetlenül nagy adatod, akkor azt ne kelljen lemásolni újból valahova, mert az sok erőforrás elvesztésével járhat, hanem ha már egyszer kiszámoltad valahol, akkor azt mondod, hogy "itt van fiam, ezt használd". A konstans pedig talán érthető.
2014. febr. 10. 06:38
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:

const int get()

Egy másolatot ad vissza.


const int& get()

Magát az eredményt.


Mindkettő lefutot, de akkor most a netes leírások, és az alapján, amit írtál valahogy így kell elképzelnem.

2014. febr. 10. 07:30
 7/10 iostream ***** válasza:
37%

"const int& get()

Magát az eredményt."


De ez csak akkor értelmes kód, ha a visszaadott dolog nem semmisül meg a get lefutása után (magyarul nem függvény lokális a visszaadott cucc).

2014. febr. 10. 12:30
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

De ha jól gondolom, akkor ez csak a nagyobb objektumoknál kell mindenképpen referenciával, mert végül is például egy egyszerű számnál nem számottevő az a töredéknyi másolási idő, nem?

Bár lehet az a legjobb megoldás, ha mindet inkább referenciával oldom meg...

2014. febr. 10. 22:04
 9/10 iostream ***** válasza:
A másolás igazából gyorsabb, mint a referenciázgatás. Ugyanis a referencia többnyire pointerként van implementálva, annak is van mérete, azt is kell másolgatni, és még egy réteg indirekció is belekerül a kódba. De sokkal fontosabb, hogy referenciát csak tényleg létező ojjektumra szabad visszaadni.
2014. febr. 11. 09:56
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:
Értem.
2014. febr. 11. 15:46

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!