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
For range statement
for (tip e : k){
//
}
K mora biti kontejner
Za svaki el iz kontejnera aplicirat stejtmente unutar bloka (e je lokalna var i inicijalizirana vrijednoscu elementa na poziciji broja iteracije koja se desava)
Samim time blok se izvrsava onoliko puta koliko ima elemenata u kontejnery
Sta su fje viseg reda
Koja umjesto parametra uzima drugu fju ili kao prozivedeni rezultat daje drugu fju
Ugnjezdena fja
NE, definicija fje SAMMO u ns
Sta je lambda izraz
Objekat koji se moze pozvati malim zagradama poput fje ali se moze i proslijediti u fju kao argument
Forma lambda izraza i gdje se moze definirati
Moze li lambda u var
Objekat lambda izraza se moze smjestiti u var (obaveznk tip auto) jer ne znamo koji tip prozivodi lambda izraz to samo zna kompajler
Nijedan lambda izraz ne proizvodi isti tip
Moze se implicitno konvertovati u std::function sto se koristi za prosljedjivanje kao arg za inicijalizaciju parametara
Da li su lokalne var definirane prije lambde vidljive unutar nje
NE zbig cega postoji []
Ukoliko je klauzula prazna nista definirano prije izraza nije vidljivo u njemu, te ako hicemo da bude vidljivo to navodimo u klauzuli
Sta sve moze biti u []
Mozemo proslijediti samo var
[ime_var] ovako prosljedjena var je prosljedjena po vr kao konstantsa tog tipa koja ima istu vrijednost sto znaci da se dalje u izrazu ne moze mijenjati i u memoriji postoje dvije te var
ako iza liste parametara dodamo keyword mutable u tom slucaju var prosljedjene po vr nisu konstante i mogu se mijenjati unutar izraza ali idalje u memoriji postoje 2 razlocite mem lokacije
[&ime_var] var se prosljedjuje u izraz kao referenca i moguce su promjene nad istom u tom slucaju se mijenja i vanjska var
[&] sve var prethodno definisane se prosljedjuju kao reference i vrijede pravila
[=] sve var prethodno definisane se prosljedjuju po vr i vrijede pravila (vrijedi pravilo i za muatble jer su inace sve const)
[&, imevar] ili [=, &imevar] moguce dio var prenijeti po vr ili ref eksplicitnim imenovanjem
Treci argiment sorta
Uzima 2 parametra po konstantnoj referenci i vraca boolean na osnovu zadatoh uslova