P7 Flashcards
Sta kompajler radi kada vidi def fje
Pokusava prevesti u masinac i qko je kod sintaksicki validan dobijamo prevod a kompajler zapamti da postoji blok pod tim umenom koji se moze pozvati u kodu
On ocekuje poziv
Da li referenca ima svoj komad memorije
Ne ona nema svij komad memorije vec koristi memorijski prostor druge var ond pokazuje na njega
Sta se desi kada pzoovemo fju
Izrazi na mjestu arg se izvrse (nespecifucqn redoslijed), povratne vrijednosti se implicitno konvertuju u vr tipa parametara i prosljedjuju za njihovu inicijalizaciju
Sta je izrazr uz return
Izraz koji se izvrsi i vraca vrijednost bilo kog tipa nakon cega se implic konvert u povr tip fje
Vise reurn stejtmenta?
Moze ali moraju biti isti tip
Auto kod parametara
Ne moze
Argum po vr
Vrijednksti argumenata se kopiraju i dodjeljuju parametrima fje
Imamo po 2 var sa istim vrijednostima
Void
Ne vraca nista i kompajler ne ocekuje return kao kod istalih fja
Moze li se cout u vodiu
Moze jer je to popratni sadrzaj *ispis na ekran
Zasto se koriste reference kod fja
Ako koristimo tipove koji su stringivi ili vektoru i ugl kontejneri i ako oni imaju veliki broj elemenata, ako ih proslijedimo po vrijednosti sve to se kopira sto zauzima puno memorije i jako je sporo obzirom da se kasnije ta memorija mora i dealocirati
Jako je skupo i ima slabe performanse
Da bi se to izbjeglo program koristi minimalno memorije upotrebom reference na mjestu parametara umjesto prosljedjivanja po vrijednosti (jos bolje je ako to moze biti const referenca jer poboljsava performansu)
Ako proslijedimo po const ref sta se desava u fji
Sve operacije se vrse na prosljedjenom objektu bez kopiranja istog ali fja ni na kakav nacin ne mijenja stanje prosljedjenog ibjekta jer moze samo da cita iz istog
Izbor prosljedjivanja po vrijednosti ili po referenci
- Const &
- & ili vrijednost
- Ako se original ne mijenja i koristi samo za citanje
2.1. Po & samo ako je potrebno da funkcija mijenja objekat prosljedjen kao argumjebt uku ako se vraca vuse id 1 vrijednosti
2.2. Ako ne zelimo da se mijenja objekat, dodatno ako su u pitanju primitivni tipovi nema puno razlike izmedju prosljedjivanja na oba nacina
Kada ne mozemo proslijediti arg kao kontejner po const &
Ako jma sort pozvan jer on mijenja stanje kontejnera
Nema errora pri kompajliranju ali nastaje jedan tokom runtimea
Kako je moguce kao arg proslijediti nacin na koji se vrsi unos u neki kontejner npr
Ako ukljucimo incc<fstream> i kao parametar navecedmo const std::istream&
Tada mozemo birati na koji nacin prosljedjujemo podatke, da li preko cin ili unosimo datiteku nebirntno</fstream>
PARAMETAR MORA BITI PROSLIJEDJEN PO CONST REF JER SE ISTREAM NE MOZE KOPIRATI
Razlika kada u mainu imamo return 0; i return neka druga vrijednkst
return 0; sve ok
return != 0 program terminiran prijevremeno nije mogao ispisati rezultat