Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
BlameGame Forumaš(ica)
Pridružen/a: 14. 09. 2011. (19:17:53) Postovi: (6C)16
|
|
[Vrh] |
|
nuclear Forumaš(ica)
Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16
Spol:
|
Postano: 10:05 čet, 26. 6. 2014 Naslov: |
|
|
I mene to zbunjuje, također zašto je u jednom slučaju funkcija const a prima i neconst varijable...to s tim const mi nikako nije jasno...
[size=9][color=#999999]Added after 52 minutes:[/color][/size]
Ove odgovore sam našla u "Demistificirani c++":
Upotreba referenci i pokazivaèa je ipak neizbjena kada funkcija treba istovremeno promijeniti dva ili vie objekata, ili kada se funkciji moraju prenijeti velike strukture podataka, poput polja (vidi sljedeæi odjeljak 7.4.5). U takvim prilikama, ako funkcija ne mijenja vrijednosti argumenata, korisna je navika deklarirati te argumente nepromjenjivima pomoæu kljuène rijeèi const.
Da bi se izbjegle neprilike koje naknadne nepaljive promjene kôda mogu
izazvati, preporučljivo je argumente koji se prenose preko pokazivača ili
referenci, a koji se ne ele mijenjati, učiniti konstantnima.
Èak ako i ne mijenjamo vrijednosti na koje pokazivaè pokazuje unutar funkcije DuljinaNiza(), prevoditelj to ne moe znati. Iz svoje paranoje on æe sprijeèiti gornji pokuaj pridruivanja nepromjenivog objekta promjenjivom parametru kako bi se osiguralo da objekt u svakom sluèaju ostane nepromijenjen (lat. object intacta). Zbog toga ako funkcija ne mijenja svoje parametre, poeljno je to obznaniti javno tako da se umetne modifikator const u listu parametara.
Više o tome od stranice 253...iako mi je teško samoj to istraživati u tako velikom fajlu. Sretno!
http://www.oss.unist.hr/~jvrlic/dokumenti/OOP/demistificirani_c++.pdf
I mene to zbunjuje, također zašto je u jednom slučaju funkcija const a prima i neconst varijable...to s tim const mi nikako nije jasno...
Added after 52 minutes:
Ove odgovore sam našla u "Demistificirani c++":
Upotreba referenci i pokazivaèa je ipak neizbjena kada funkcija treba istovremeno promijeniti dva ili vie objekata, ili kada se funkciji moraju prenijeti velike strukture podataka, poput polja (vidi sljedeæi odjeljak 7.4.5). U takvim prilikama, ako funkcija ne mijenja vrijednosti argumenata, korisna je navika deklarirati te argumente nepromjenjivima pomoæu kljuène rijeèi const.
Da bi se izbjegle neprilike koje naknadne nepaljive promjene kôda mogu
izazvati, preporučljivo je argumente koji se prenose preko pokazivača ili
referenci, a koji se ne ele mijenjati, učiniti konstantnima.
Èak ako i ne mijenjamo vrijednosti na koje pokazivaè pokazuje unutar funkcije DuljinaNiza(), prevoditelj to ne moe znati. Iz svoje paranoje on æe sprijeèiti gornji pokuaj pridruivanja nepromjenivog objekta promjenjivom parametru kako bi se osiguralo da objekt u svakom sluèaju ostane nepromijenjen (lat. object intacta). Zbog toga ako funkcija ne mijenja svoje parametre, poeljno je to obznaniti javno tako da se umetne modifikator const u listu parametara.
Više o tome od stranice 253...iako mi je teško samoj to istraživati u tako velikom fajlu. Sretno!
http://www.oss.unist.hr/~jvrlic/dokumenti/OOP/demistificirani_c++.pdf
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
Postano: 13:36 čet, 26. 6. 2014 Naslov: |
|
|
Makar ne znam kaj te točno buni tj. zanima objasnit ću ukratko sve kaj bi moglo bit nejasno.
1. zašto se proslijeđuju reference?
Prilikom pozivanja funkcija, funkcije rade svoje kopije argumenata, pa ako se radi o nekim velikim klasama/strukturama troši se dodatno vrijeme i memorija na kreiranje lokalnih kopija argumenata. Kada proslijedimo referencu, tada se iskopira samo referenca na neku postojeću klasu i time smo uštedjeli i vrijeme i memoriju. Također, preko reference je moguće pristupiti strukturi/objektu/varijabli koja proslijeđena kao argument funkcije i promijeniti je. (Nešto slično pokazivačima, ali sa jednostavnijom sintaksom za većinu ljudi)
2. Zašto ide const referenca?
ključna riječ const postavlja se isključivo iz razloga da se spriječi mijenjanje reference. Znači, želimo uštedjeti na memoriji i vremenu, ali ne želimo da to dovede do nekog nepoželjnog, slučajnog ili namjernog mijenjanja onog što proslijeđujemo kao argument
To se sve može malo detaljnije objašnjeno može naći i [url=http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/]ovdje[/url]. (prvi rezultat guglanja)
3. Ključna riječ const nakon funkcije? Znači da pozvana funkcija neće promijeniti niti jednu varijablu unutar objekta koji ju je pozvao. Osim specijalnih mutable varijabla, al ne znam dal ste to radili ili koristite li ih uopće.
4. Zašto je povratna vrijednost funkcije referenca?
Ovdje je najveća razlika u dva koda, jer gornje dva detalja možda i nisu toliko ključna za značenje koda (tj. ako se korektno napiše na bilo koji način, ključne riječi i reference nisu toliko bitne, naravno ako nam memorija i vrijeme nisu neki važni resursi).
U pravilu kada se vraća referenca ona se vraća kako bi se mogao [url=http://en.wikipedia.org/wiki/Method_chaining]ulančati poziv funkcija[/url]. Naravno može se to koristiti i za neke druge stvari, no za ovo se koristi najčešće, a ako te zanima više malo pretraži internet.
Druga funkcija vraća kopiju lokalne varijable funkcije. Bitno je da se zna da se ta vraćena struktura kopira po vrijednosti. Takozvana [i]plitka[/i] ili [i]površna[/i] kopija, nešto o takvom, ali o drukčijim kopiranjima ima [url=http://en.wikipedia.org/wiki/Object_copy]ovdje[/url]
Makar ne znam kaj te točno buni tj. zanima objasnit ću ukratko sve kaj bi moglo bit nejasno.
1. zašto se proslijeđuju reference?
Prilikom pozivanja funkcija, funkcije rade svoje kopije argumenata, pa ako se radi o nekim velikim klasama/strukturama troši se dodatno vrijeme i memorija na kreiranje lokalnih kopija argumenata. Kada proslijedimo referencu, tada se iskopira samo referenca na neku postojeću klasu i time smo uštedjeli i vrijeme i memoriju. Također, preko reference je moguće pristupiti strukturi/objektu/varijabli koja proslijeđena kao argument funkcije i promijeniti je. (Nešto slično pokazivačima, ali sa jednostavnijom sintaksom za većinu ljudi)
2. Zašto ide const referenca?
ključna riječ const postavlja se isključivo iz razloga da se spriječi mijenjanje reference. Znači, želimo uštedjeti na memoriji i vremenu, ali ne želimo da to dovede do nekog nepoželjnog, slučajnog ili namjernog mijenjanja onog što proslijeđujemo kao argument
To se sve može malo detaljnije objašnjeno može naći i ovdje. (prvi rezultat guglanja)
3. Ključna riječ const nakon funkcije? Znači da pozvana funkcija neće promijeniti niti jednu varijablu unutar objekta koji ju je pozvao. Osim specijalnih mutable varijabla, al ne znam dal ste to radili ili koristite li ih uopće.
4. Zašto je povratna vrijednost funkcije referenca?
Ovdje je najveća razlika u dva koda, jer gornje dva detalja možda i nisu toliko ključna za značenje koda (tj. ako se korektno napiše na bilo koji način, ključne riječi i reference nisu toliko bitne, naravno ako nam memorija i vrijeme nisu neki važni resursi).
U pravilu kada se vraća referenca ona se vraća kako bi se mogao ulančati poziv funkcija. Naravno može se to koristiti i za neke druge stvari, no za ovo se koristi najčešće, a ako te zanima više malo pretraži internet.
Druga funkcija vraća kopiju lokalne varijable funkcije. Bitno je da se zna da se ta vraćena struktura kopira po vrijednosti. Takozvana plitka ili površna kopija, nešto o takvom, ali o drukčijim kopiranjima ima ovdje
|
|
[Vrh] |
|
BlameGame Forumaš(ica)
Pridružen/a: 14. 09. 2011. (19:17:53) Postovi: (6C)16
|
|
[Vrh] |
|
|