[ R A V E N @ 18.06.2009. 13:09 ] @
Pitanje 1:
Koliko puta se u ovom kodu poziva copy konstruktor? Riječ je o klasi.

Code:
Widget f(Widget u)
{ Widget v(u);
  Widget w=v;
  return w;
}

main()
{ Widget x;
  Widget y=f(f(x));
}


Odgovor: 7 puta. Ja sam odgovorio: 4 puta. Meni ustvari nije do kraja proces koji se odvija ovdje. Ja sam shvatio da:

prvo se deklariše i definiše funkcija koja prima i vraća klasu tipa Widget. U funkciji se kreira još jedna klasa tipa Widget i imena v koju se kopira sadržaj u, što je prvo kopiranje. Onda se kreira još jedna klasa tipa Widget i imena w u koju se kopira sadržaj v, što je drugo kopiranje. Funkcija se u glavnom programu poziva dva puta, dakle ukupno imamo 4 kopiranja, odnosno poziva copy konstruktora.

[Ovu poruku je menjao R A V E N dana 18.06.2009. u 14:36 GMT+1]
[ Mihajlo Cvetanović @ 18.06.2009. 13:37 ] @
1. poziva se f(x), x se kopira u u
2. v se dobija kopiranjem od u
3. w se dobija kopiranjem od v
4. vraća se vrednost funkcije, w, koja se kopira negde na stek (možda i ne, možda se ide direktno na sledeći korak, to zavisi od implementacije u kompajleru)
5. ponovo se poziva funkcija f sa onim što je na steku iz prethodnog koraka, i to se kopira u u
6. ponovo se v dobija kopiranjem od u
7. ponovo se w dobija kopiranjem od v
8. ponovo se vraća vrednost funkcije, w, koja se kopira negde na stek (a možda i ne)
9. ono što je na steku se kopira u y

E sad, čini se da profa ne zna da povratna vrednost funkcije može da ide preko steka, a može da se dodeljuje i direktno, zavisno od implementacije. A možda vam je i napomenuo kako on vidi taj slučaj, tako da odgovor što se njega tiče i jeste sedam.
[ R A V E N @ 18.06.2009. 13:49 ] @
Stvar je u tome da nije ovo po tome kako je profesor predavao ili "hranio" "slijepe" studente kašičicom gradivom iz C++-a (bez imalo namjere da budem sarkastičan), nego sam ja "pješke" krenuo da učim C++ iz knjige Schaum's Outline of Theory and Problems of Programming With C++, 2nd Edition, odakle je i ovaj zadatak (stranica 249., 10.15). Ustvari sam sebi time i otežao, ali nema veze,ovako mi je prijatnije učiti kada radim samostalno.

Hvala ti, Mihajlo, na odgovoru. Ako sam dobro razumio, ono što si ti opisao govori o 9 kopiranja, a kada ide direktno, ima 7 kopiranja?
[ Mihajlo Cvetanović @ 18.06.2009. 13:52 ] @
Da.
[ R A V E N @ 05.10.2009. 23:48 ] @
Pitanje 2:

Možda je ovo najbolji forum da postavim ovakvo pitanje, mada nije direktno vezano za C++.

Imam dvije .MP3 datoteke. Obadvije otvorim u Notepadu++ (popularni editor tekstualnih datoteka). Naravno, obadvije datoteke se prikažu kao hrpa bizarnih znakova. Onda izaberem komandu za uspoređivanje dviju datoteka i Notepad++ prijavi da su ta dva .MP3-a identična. Da li je ovo pouzdan način dobivanje te informacije, s obzirom da je riječ o binarnim datotekama?

Interesuje me konkretno za Notepad++, ne bih da instaliram neki specijalni program.
[ Mihajlo Cvetanović @ 06.10.2009. 09:59 ] @
Notepad++ gleda fajlove kao da su tekstualni. To znači da je za njega novi red bilo šta od sledećeg: <CR>, <LF>, <CR><LF>. To znači da ako se dva fajla razlikuju utoliko što u jednom stoji jedno od ova tri, a u drugom drugo, Notepad++ će reći da su identični. Binarno poređenje možeš da izvedeš iz Command Prompta, komanda je fc, opcija za binarno je /b:

> fc /b <prvi fajl> <drugi fajl>
[ Goran Arandjelovic @ 06.10.2009. 13:25 ] @
A i uvek možeš da napišeš svoj mali program koji poredi dve datoteke (čitaj: da sam recimo napišeš nešto kao fc koju ti je Mihajlo pomenuo). Ne znam da li si zbog toga postavio pitanje ovde...
[ R A V E N @ 07.10.2009. 21:27 ] @
Hvala vam obojici na odgovorima, a pitao sam ovdje jer sam očekivao da ću dobiti najbrži i najprecizniji odgovor - ipak je to problematika koja je najviše bliska C++-u i njegovom rukovanju sa datotekama.

A to za fc komandu je sjajna stvar.