Diskuze: Zajímavá záludná otázka :)
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 15 zpráv z 15.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Program se zkompiluje (měl by s warningem). Výsledek je teoreticky nedefinovaný, ale prakticky by se mělo vypsat 99, jelikož mezi voláním funkce a výpisem není nic, tzn. na stacku se nic nealokuje, paměť kde byly uloženy hodnoty proměnné a z funkce foo i když dealokovaná zůstává nezměněna, tudíž x a y budou pořád odkazovat na čísla 49 a 50 až do té doby, dokud se na stacku tahle část paměti nerealokuje a nezmění.
EDIT: Samozřejmě počítám s tím, že program běží v jednom vlákně.
Teď mi došlo že je to blbost, protože to druhý volání tu paměť přepíše, takže se vypíše 100, protože v tom místě je čislo 50, a obě reference na něj odkazujou.
Ale teď mi došlo že je to blbost protože deklarace reference y ten stack
posune, takže by se mělo vypsat těch 99 
Asi souhlasím, jen ten případný výsledek by měl být spíš 100, protože při prvním zavolání se sice na zásobník uloží 49, ale po výstupu z funkce se stack pointer zase posune zpátky, takže druhé volání té funkce s parametrem 1 (který se předá nejspíš přes registr) pak znova zapíše na to samé místo v zásobníku, tentokrát 49+1, tedy 50 a x i y budou ukazovat na stejné místo v zásobníku, i když vlastně v tu chvíli ta pamět součástí zásobníku není - je to jen ta paměť rezervovaná pro zásobník.
Teď jsem to zkoušel v Dev-C++ a očividně záleží na kompilátoru. Protože mi sice vyhodil warning, ale po vypsání adres jsem zjistil, že tu paměť nedealokoval a posouval stack pořád dál. Možná kompilátor pozná že vracíš referenci, a bere obsah funkce jako obsah volající funkce, ale z toho co vim o C++ by to tak bejt nemělo.
Tak ne, při zapnutí maximální optimalizace (což já mam) se stack nedealoku s koncem funkce, ale posouvá se pořád dál až do konce funkce main. Trošku zvláštní, jako kdyby všechny funkce byly inline.
Takže asi výsledek je nedefinovaný, protože různé implementace dopadnou různě.
Některý kompilátor může ten parametr předávat přes registr, jiný přes zásobník, některý kompilátor na stacku paměť kam ukazuje x podrží ještě do konce volající funkce, jiný ji třeba hned zahodí.
Ona takhle jednoduchá funkce se při optimalizacích inlinuje asi skoro vždy.
Pravda, u delší funkce by se to možná nestalo. U toho posunu stacku při deklaraci reference y mi ještě nedošlo, že kompilátor nejspíš data alokuje na stacku dřív než provádí ostatní kód funkce, takže se to už nikam neposouvá, ale to dost možná taky záleží na kompilátoru.
Btw. nemáś víc takových záludných otázek? Mohla by bejt nějaká
zábava. 
Na to jsem narazil náhodou na FB, když něco najdu, klidně to sem hodím

Mě napadla jedna. Je to spíš úloha než otázka.
Nasimulovat v C++ něco jako var. Tzn. vytvořit typ do kterýho de uložit
cokoliv, a při změně a skončení platnosti se to správně dealokuje.
Samozřejmě ten typ těžko pozná na co se konvertovat, takže se to musí
vždycky konvertovat explicitně.
Nemá to asi žádný využití, ale řek bych že jako úloha to pro někoho
může bejt dost zapeklitý. 
Nějaký inteligentnější void pointer by nestačil? 
Tam jde právě o to, aby to nefungovalo jako odkaz, ale aby se do toho typu
data zkopírovaly. Ale vevnitř to přes ten pointer funguje mno... 
Zobrazeno 15 zpráv z 15.
