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?
Í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.
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 ; }
É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?
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.
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.
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.
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!