Kezdőoldal » Számítástechnika » Programozás » Ha konstans objektumra hivatko...

Ha konstans objektumra hivatkozó mutatót adok vissza retunal egy függvényből, akkor miért nem nézhet ki így a függvény visszatérési értéke?

Figyelt kérdés

Így lefordul:

const cSimpleCat *const functionTwo(const cSimpleCat *const TheCat) { retunr TheCat ; } // Így lefordul.


Így pedig nem:

cSimpleCat *const functionTwo(const cSimpleCat *const TheCat) { retunr TheCat ; }


Azt nem értem,hogy a függvény visszatérési értéke miatt miért nem fordul le az utóbbi esetben.


Ha nem cím szerint történne a visszaadás,akkor meg elhagyható a const a visszatérési értékből annak ellenére,hogy a függvényben az érték szerint vissza adott objektum constans.


Nem értem.

Jobban nem tudom elmagyarázni remélem érthető mit nem értek és tudtok segíteni egy zöld kézért.


2012. szept. 4. 01:33
 1/9 anonim ***** válasza:

Nem mindegy, hogy a pointer a konstans, a pointer által mutatott objektum példánya a konstans, vagy a függvény.


A "retunr" helyett használja "return" -t (gondolom, ez csak elírás volt).


Az első függvény, ami lefordul, azért fordul le, mert a paraméter és a return ugyanaz. Konstans pointer konstans objektumra.


A második függvény bemenete szintén konstans objektum konstans pointere, de a visszatérési érték esetében már csak a pointer konstans, maga az objektum nem.


Így lefordulna pl:

cSimpleCat *const functionTwo(cSimpleCat *const TheCat) { retunr TheCat ; }

2012. szept. 4. 01:57
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

És ez miért fordul le akkor?

cSimpleCat functionFour(const cSimpleCat TheCat) { return TheCat ; }

Itt az objektum konstans de a visszatérési érték nem.És mégis lefordul.Miért?

2012. szept. 4. 02:30
 3/9 anonim ***** válasza:
Ha a függvény belsejében nem módosítod a paramétert, akkor ez működik. Ez egy aránylag bonyolult témakör, javaslom Nyisztor Károly gyakorlati C++ c. könyvét!
2012. szept. 4. 02:33
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Ja, hogy a kérdésre is válaszolja, azért fut le úgy, mert a call stackben csak az objektum másolata jön létre, mivel nem pointer.
2012. szept. 4. 02:35
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

Ezt nem értem.

Ha a függvény bemenő paramétere egy constans objektumra hivatkozó mutató akkor miért csak ez lehet a függvény visszatérési értéke: const cSimpleCat* miért nem jó const nélkül?


De ha a függvénynek érték szerint adtam át az objektumot pl:

cSimpleCat X(const cSimpleCat TheCat) { return TheCat ; }

akkor pedig elhagyható a const a visszatérési értékből annak ellenére,hogy a függvényben a TheCat const.

Ha érték szeint adok át a függvénynek elhagyható a const ha pedi cím szerint akkor meg nem.

Miért?


Egyébként ez is lefordul:

const cSimpleCat * functionTwo(const cSimpleCat *const TheCat) { retunr TheCat ; }

Lássátok a visszatérésbe ne const mutatót adok vissza pedig a bemenő paraméterbe const a mutató.

De ha így csinálom akkor meg nem jó:

cSimpleCat *const functionTwo(const cSimpleCat *const TheCat) { retunr TheCat ; }


Remélem a példákkal sikerült átadnom nektek,hogy pontosan mit nem értek.

2012. szept. 4. 02:42
 6/9 anonim ***** válasza:

Ezek a függvények csak visszaadják, amit kaptak, tehát ha ugyanolyan típust ad vissza, mint amit kap, nem kérdés, hogy miért működik.


Pointereknék azért kell így lennie, mert a pointer által mutatott memóriaterület a függvényen kívül is létezik, azon kívülről is elérhető.


Ha nem pointert adsz át, a függvényhíváskor létrejövő call stackben a paraméter másolata jön létre. Ha a paramétert konstansként deklarálod, a függvény belsejében nem módosíthatod, de amikor visszaadáskor újra lemásolódik az érintett memóriaterület, már nem kell, hogy konstans legyen. Az már egy másik adat.


Fontos tehát megkülönböztetni az azonosságot és az egyenlőséget. Nem ugyanaz a kettő. Ez a magyarázat röviden, de ebben a témában mélyebben el kell merülnöd. Sajnos nem tudok most itt legépelni egy harminc oldalas szöveget.


Remélem, tudtam segíteni azért valamennyit.

2012. szept. 4. 02:58
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:

Nem értem túl kevés ez a magyarázat.

Melyik könyvbe van ez benne részletesen?

A neten nem találok erről magyar leírást.

2012. szept. 4. 03:13
 8/9 A kérdező kommentje:
Azt hiszem már kezdem érteni.
2012. szept. 4. 06:03
 9/9 iostream ***** válasza:
Baromi egyszerű: ha objektumot adsz vissza, akkor nem-konstans objektumot létre tudsz hozni konstans objektumból. Ha mutatót adsz vissza, nem-konstans mutatót nem tudsz konstans objektumra állítani, különben elveszítené a konstans mivoltát.
2012. szept. 4. 09:11
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!